1

Visual C++ 2005 (アンマネージ C++) で作成したスタティック ライブラリを使用しようとしています。「int myF(int a);」という関数を 1 つ宣言します。.h ファイルに変換し、.cpp ファイルに実装し、コンパイルします - .lib ファイルが生成されます。

VC++ 2005 (ネイティブ C++) で新しいプロジェクト (別のソリューション) を作成し、インクルード ファイルと lib ファイルのパスを追加します。関数 myF を呼び出すと、リンカーはエラーを報告します:「エラー LNK2019: 未解決の外部シンボル _myF が関数 _main で参照されています」。ライブラリ プロジェクトと同じソリューションでクライアント プロジェクトを作成し、ライブラリ プロジェクトへの参照を追加すると機能しますが、このようにすべてを実装するのではなく、プロジェクトに外部ライブラリを追加します。 .

なにが問題ですか?

ありがとうございました。

4

4 に答える 4

2

2 番目のプロジェクトには、実際の .lib ファイルも含める必要があります (パスだけではありません)。

これを行うには、リンカー設定にオプションが必要です。

于 2008-10-09T15:03:15.553 に答える
2

MyStatic.lib があるフォルダーをリストするだけでは十分ではありません。Dependant.vcproj が MyStatic.lib を使用していることをリンカーに明示的に伝える必要があります。

VS2005 では、プロジェクト プロパティ -> リンカー -> 入力 -> 追加の依存関係でこれを行います。.h ファイルにいくつかのプリプロセッサを振りかけて、リンカーに MyStatic.lib を使用するように指示するようコンパイラに指示することもできます。

編集:プリプロセッサの魔法は次のようになります

#pragma comment(lib, "MyStatic.lib")
于 2008-10-09T15:05:08.293 に答える
1

(編集:これは、リンクフェーズで/ NODEFAULTLIBエラーが発生するという質問への回答でしたが、現在は削除されています...肩をすくめる)

defaultlibエラーが発生する場合は、コンパイラ設定を混合しています。たとえば、ライブラリをデバッグでビルドし、メインをリリースでビルドする場合、異なるバージョンのCRTLを使用するようにビルドされているため、このエラーが発生します。これは、オブジェクトライブラリまたはDLLとしてCランタイムとリンクするために異なる設定を使用する場合にも発生する可能性があります。(「ランタイムライブラリ」設定の下の「C / C ++オプション」の「コード生成」セクションを参照してください)

多くのプロジェクトでは、ライブラリの設定を修正できない場合にできることはあまりありません(たとえば、サードパーティのライブラリ)。このような場合は、「特定のライブラリを無視する」という「入力」セクションのリンカーオプションである/NODEFAULTLIBスイッチを使用する必要があります。

ただし、メインとライブラリの両方を制御しているため、LIBファイルのデバッグバージョンとリリースバージョンを作成するか、「C /C++;コード生成;ランタイムライブラリ」の設定が両方のプロジェクトで一致することを確認してください。

于 2008-10-09T18:35:11.257 に答える
0

プロジェクト プロパティのリンカー入力で追加の依存関係を設定してみてください。

于 2008-10-09T15:01:51.703 に答える