2016-08-02 9 views
1

でコンパイルされたコードをリンクします最終的な実行可能ファイルにリンクされます。未解決の参照である、私は私が<code>.dll</code>に(<code>link.exe</code>で)リンクしようとしている<code>msvc</code>/<code>cl.exe</code>によってコンパイルされたオブジェクト、と(<code>yasm</code>でコンパイルされた)アセンブリを組み合わせるためにしようとしているNASMとMSVC

ソースからオブジェクトファイルを作成し、これらのオブジェクトからdllを作成することは、どちらも問題なく動作します。実行可能で.dllを結ぶ最後のステップで

は、次のエラー吐く:Win64のには名前のマングリングを持っていないにも関わらず、私はCを使用してい

error LNK2019: unresolved external symbol xxx_xxxx 

を、私は(_xxx_xxxxまたは__imp_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からエクスポートされたシンボルで

$ 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 

でもない:dumpbin.exeを持つオブジェクトファイルを確認する

は、すべてのシンボルを明らかに__declspec(dllexport)を使用してください。

どのようにリンカーを満たし、シンボルが本当にそこにいることを伝えるためのアイディアですか?

+0

Microsoftのツールを使用して実行可能ファイルにDLLをリンクすることはできません。 DLLに対応するインポートライブラリを使用する必要があります。 –

+0

@RossRidge私は生成されたインポートライブラリを使用します。 – Leandros

答えて

1

DLLが必要なシンボルを公開しないという問題があります。 __declspec(dllexport)は、シンボルをエクスポートする唯一の方法ではありません。いくつかの名前がエクスポートされている場合は、/EXPORTリンカスイッチを使用できます。もう1つの方法は、ファイルModule-Definitionを使用する方法です。

+0

残念ながら、 '/ EXPORT'を実現できないようにする機能はほんの数以上あります。既に作成された.libを結合して、defファイル経由で別の作成とdllをリンクすることはできますか? – Leandros

+0

はい、DEFファイルは、エクスポートしたい機能のリスト(一部の追加情報)です。結果のバイナリの機能には影響しません。もちろん、関数は 'dumpbin'でエクスポートテーブルに表示されることを確認する必要があります。 – Sergio

+0

これは機能しますが、残念ながら半分の解決策しかありません。ビルドフラグやdefファイルにすべてのシンボルを手で追加することはできません。 – Leandros

関連する問題

 関連する問題