2

誰かがプロセスを理解するのを手伝ってくれませんか。

C ++ビジュアルスタジオ2010で

私はビジュアル スタジオ ソリューションを持っています (それを mysol と呼びましょう)

静的ライブラリとしてビルドされたプロジェクトがあります (staticprj と呼びましょう) staticprj は外部からライブラリを使用する必要があります (ext.lib と呼びましょう)

staticprj のソース コードの本文に、# include extlib.h を使用して外部ライブラリ ヘッダー ファイルをインクルードし、その関数の一部を呼び出します (それらを extfunctions() と呼びましょう)。ヘッダー ファイルの場所へのパスも含めます。 ext.lib。

staticprj はエラーなしで正常にコンパイルされます

mysol には、動的ライブラリ (dynprj) であり、staticprj に依存する別のプロジェクトもあります。

また、dynprj のソース ファイルでは、外部ライブラリの関数を使用します。

dynprj のソース コードに #include extlib.h を含めました。ヘッダー ファイルのパスを含めました。extlib.h を dynprj に直接添付しました。また、ext.lib をリンカー入力に追加しました (ext.lib が存在するパスと共に)。

extfunctions() が見つからないことを示す lnk2001 エラーがまだ発生します。

ext.lib をまったく使用しなくても、構造全体 (mysol ソリューション) は正常にコンパイルされます。

私の質問は、リンク プロセスがどのように機能するか、およびこのリンク エラーを修正するために何ができるかです。

(ext.lib が存在しなくても、staticprj と dynprj のリンクは問題ありません。コンパイルは問題なく動作し、コードも動作します。別の ext.lib を staticprj と dynprj にリンクして使用しようとすると、リンク エラーが発生するだけです。 ext.lib の関数)

前もって感謝します。

4

1 に答える 1

-1

うまくいくかどうかはわかりませんが、「mysol」デバッグ フォルダ内に .dll を入れてみてください。ライブラリを.dllとしてコンパイルした数週間前に、同様の問題が発生しました。その .dll をデバッグ フォルダー内に配置したところ、問題なく動作しました。

于 2012-10-10T00:15:36.567 に答える