未解決の外部シンボル [重複]
-
18-09-2019 - |
質問
私は、最終的に C# で参照される .dll として使用できるように、多数の .h ファイルと .lib ファイルをネイティブ C++ からマネージド C++ にラップすることに取り組んでいます。
.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 つの関数を除いて残りはすべて正常にリンクしていることです。
何か案は?
解決
欠けているシンボルは、 __imp__htonl@4
, これは、長い値をホストからネットワーク順序に変換する関数である htonl の C++ のマングル名です。@4 は入力パラメーターをマングルするために使用され、オーバーロードされた関数に対する C++ サポートの一部であり、リンカーが名前の衝突なしに正しい関数を解決できるようにします。
このシンボルを参照しているネットワーク ライブラリにリンクされていることを確認してください。おそらく、パッケージは通常の MACRO の代わりに、このシンボルの特別な定義を使用していると考えられます。
他のヒント
署名が一致していると確信していますか?署名性と定数性を必ずチェックしてください。また、関数がインライン化されていないことを確認してください。
ライブラリに対してコンパイルし、リンクする前にライブラリを変更したときにこのエラーが発生しました。ヘッダーがライブラリによって提供されているものと同じであることを確認してください (別のアーキテクチャからコピーされていないなど)。もちろん、ws2_32.lib (mingw/gcc の場合は -lws2_32) に対してリンクしていることを確認してください。
さらに、GCC/mingw を使用している場合は、これを参照するとよいでしょう。 MinGW リンカー エラー:ウィンソック