静的ライブラリを別のライブラリに含める(リンクする)際の問題
-
07-07-2019 - |
質問
私がやりたいことをすぐに説明しよう:
依存関係としてもう1つを持つ静的ライブラリを使用するプロジェクト。 MyLib2にリンクするMyLib1にリンクするMyProjectというプロジェクトを生成します。 コンパイル順序は次のとおりです。
- MyLib2
- MyLib1(MyLib2にリンク)
- MyProject(MyLib1にリンク)
Visual Studio 2008を使用していますが、インクルードの定義に問題があります。 リンクするとき、プロパティ「追加のインクルードディレクトリ」を使用します。 (プロジェクトプロパティC / C ++ノード上)。 これはMyProjectとMyLib1の間で機能しているようですが、MyLib1とMyLib2では機能していません。 例:MyLib2にfoo.cppというファイルがあります。 #include" foo.cpp"の使用foo.cppが不明である(ファイルまたはフォルダーがない)ことをVisual Studioに通知します。
それが間違ったパスではないことを確認するために、次のような多くの試みをしました:コマンドライン(ライブラリをコンパイルするために使用)に示されているパスをwinエクスプローラーにコピーして貼り付けます: 2番目のライブラリ。私は何度もプロジェクトを作り直しましたが、毎回異なる名前を使用し(これに注意を払わせました)、すべてが明確に定義されているように見えます(ただし「含む」ではありません)。
実際に機能させる唯一の方法:#include " c:\\ foo.cpp" をインクルードとして使用...移植性に非常に優れています!
これを自分でテストして問題点を教えてくれるソリューションのZipです。 MyProject.rar
手伝ってくれてありがとう! ルーシベラド
解決
最初に、*。cppファイルを含めないでください。
次に、外部関数の前方宣言を使用します:
void appellib2(void);
void appellib1(void)
{
appellib2();
}
3番目に、ソリューションエクスプローラーで各プロジェクトを右クリックし、[プロジェクトの依存関係...]を選択します。および適切な依存関係のセットアップ:MyProject-> MyLib1-> MyLib2。
最後に、MyProjectのプロパティで、追加の依存関係MyLib1.libを設定します。
エラーなしでプロジェクトをビルドして実行できます。
更新
リンクの問題を解決するためだけに* .cppを* .hに名前変更しないでください。 * .hファイルに定義がある場合、それを2回以上含めることはできません。
プロジェクトは YourProject.rar です。
他のヒント
.cppを.hに変更しました。私はCPPファイルを決して含めないことを知っていますが、それはテスト目的のためでした。
各関数のプロトタイプを追加しましたが、うまく機能しません(ファイルmylib2.cppが含まれていないため、プロトタイプは優れていますが、このテストでは有用ではありません)。
プロジェクトの依存関係を設定しました。それでも失敗します。
MyProjectにMyLib1.libの追加の依存関係を設定しました(これは次のエラーであり、リンクエラーが発生する可能性があります)。
これらの修正を行っても、mylib2.hエラーが含まれています:そのようなファイルまたはディレクトリはありません。
新しいアーカイブは次のとおりです。 MyProject.rar
機能するように連絡する場合、機能するソリューションのアーカイブを作成してもらえますか?
ありがとう、 Lucyberad。