6

重複の可能性:
未定義の参照/未解決の外部シンボルエラーとは何ですか?それを修正するにはどうすればよいですか?

多数の.hファイルと.libファイルをネイティブC++からマネージC++にラップして、最終的にC#で参照される.dllとして使用できるように取り組んでいます。

.libファイルがリンクされており、これまでのところすべてが順調に進んでいます。最新の.hファイルをラップすると、2つの関数がリンクエラーで戻ってきたときに問題が発生しました。

error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function
"public: void __thiscall Field::setCharacter(unsigned char,int)"
(?setCharacter@Field@@QAEXEH@Z) myutils.lib 

リンカオプションで参照myutils.libしたので、それが問題になることはありません。

奇妙なことに、この特定の.hファイルには約20個の関数があり、残りのすべては3つの関数を除いて正常にリンクしています。

何か案は?

4

3 に答える 3

6

欠落している記号は__imp__htonl@4、です。これは、htonlのC ++のマングル名であり、長い値をホストからネットワークの順序に変換する関数です。@ 4は、入力パラメーターをマングルするために使用され、リンカーが名前の衝突なしで正しい関数を解決できるようにするオーバーロードされた関数のC++サポートの一部です。

このシンボルを参照しているネットワークライブラリにリンクされていることを確認してください。おそらく、パッケージは、通常のMACROではなく、このシンボルの特別な定義を使用しています。

于 2009-07-20T14:45:00.820 に答える
1

署名が一致しますか?必ずsign-nessとconst-nessを確認してください。また、関数がインライン化されていないことを確認してください。

于 2009-07-20T14:28:13.563 に答える
1

ライブラリに対してコンパイルし、リンクする前にライブラリを変更したときに、このエラーが発生しました。ヘッダーがライブラリによって提供されるものと同じであることを確認してください(別のアーキテクチャなどからコピーされていない)。もちろん、ws2_32.lib(mingw / gccの場合は-lws2_32)に対してリンクしていることを確認してください。

さらに、GCC / mingwを使用している場合は、これを確認することをお勧めします:MinGWリンカーエラー:winsock

于 2010-05-20T14:59:26.467 に答える