1

関数をエクスポートする静的ライブラリがあります

time_t SomeClass::getTime();

コンパイル後、その名前は次のようにマングルされます

?getTime@SomeClass@@QAE_JXZ

使用しようとすると、VS がエラーを返す

error LNK2001: unresolved external symbol "public: long __thiscall SomeClass::getTime(void)" (?getTime@SomeClass@@QAEJXZ)

そして、何が悪いのかわかりません。同じ関数が異なる方法でマングルされるのはなぜですか? 同じ Visual Studio で両方のプロジェクトをコンパイルしました。クラスには単一のヘッダーがあります。

助けてください。

4

3 に答える 3

2

問題はtime_t宣言の違いでした。ライブラリは 64 ビットであることを意味しますが、アプリケーションは 32 ビット値を待ちます。

残りの質問は、「なぜ MSVS 名マングリングに関する適切なドキュメントがないのか」ということです。私はたくさん読みましたが、パラメーターリストの下線が何であるかがわかりませんでした。

于 2013-01-16T11:12:10.630 に答える
1

リンカーの INPUT プロパティに .lib ファイルを含めましたか? 同じソリューションに 2 つのプロジェクトが両方ある場合は、ライブラリをメイン プロジェクトへの参照として追加できます。メイン プロジェクトを右クリックし、[参照] をクリックします。

乾杯、

于 2013-01-16T09:10:30.420 に答える
0

プロジェクト全体を再構築してみてください。これが機能しない場合は、Visual Studio のディレクトリ (ヘッダー、ライブラリ) を確認してください。

于 2013-01-16T09:12:56.103 に答える