アセンブリ ( でコンパイル) を/でyasm
コンパイルされたオブジェクトと結合しようとしています。これは、最終的な実行可能ファイルにリンクされている に ( で)リンクしようとしています。msvc
cl.exe
link.exe
.dll
ソースからオブジェクト ファイルを作成することも、これらのオブジェクトから dll を作成することも、まったく問題なく動作します。
最後のステップで、 を.dll
実行可能ファイルにリンクすると、次のエラーが発生します。
error LNK2019: unresolved external symbol xxx_xxxx
私はCを使用しています.Win64には名前マングリングがありませんが、複数のスキーム(_xxx_xxxx
またはなど__imp_xxx_xxxx
)を試しました。
オブジェクト ファイルを調べると、dumpbin.exe
すべてのシンボルが明らかになります。
$ dumpbin /symbols myobj.o
File Type: COFF OBJECT
COFF SYMBOL TABLE
000 00000000 DEBUG notype Filename | .file
002 00000000 SECT1 notype Static | .text
Section length 215, #relocs 0, #linenums 0, checksum 0
004 00000057 SECT1 notype External | xxx_xxxx
005 0000013E SECT1 notype External | xxx_xxxx
006 00000000 SECT1 notype External | xxx_xxxx
しかし、からエクスポートされたシンボルにはありません.dll
:
$ dumpbin /exported mylib.dll
File Type: DLL
Section contains the following exports for mylib.dll
00000000 characteristics
57A0FE02 time date stamp Tue Aug 02 22:09:38 2016
0.00 version
1 ordinal base
132 number of functions
132 number of names
[...]
.dll
を使用して、宣言を 内でエクスポートされたものとしてマークしましたが__declspec(dllexport)
。
リンカーを満足させ、シンボルが実際にそこにあることを彼に伝える方法はありますか?