質問
.exeではなく.libファイルにコードをコンパイルするようにVC ++を設定する方法を見つけましたが、libを他の.objファイルとリンクさせるのに問題があります。
これは、ライブラリとアプリケーションのフォルダをどのようにセットアップするかです。 (これが正しいかどうかわかりません)
AppFolder
App.sln
App.ncb
*.h
*.cpp
Debug
*.obj
App.exe
およびハードドライブ上の他の場所...
LibraryFolder
lib
Library.lib
include
LibrarySolutionFolder
Library.sln
Library.ncb
*.h
*.cpp
Debug
*.obj
Library.lib
ライブラリの* .hファイルをアプリのcppファイルからインクルードしましたが、すべて正常にコンパイルされます。それがリンクするとき、私はすべての.libのリストを取得します 検索されているファイル、およびLibrary.libはVC ++ディレクトリにリストされていてもそこにはありません。 これをリンクするにはどうすればよいですか? (そして、ライブラリフォルダーを正しく構成していますか?)
解決
プロジェクトのプロパティ:
構成プロパティ->リンカー->入力->追加の依存関係
そこに追加します。
または、ライブラリの.hファイルに次を追加します。
#pragma comment(lib, "Library")
これにより、自動的に実行されます。
他のヒント
VC ++ディレクトリは、リンク中に検索するディレクトリの場所のリストです。リンクされるライブラリのリストではありません。
libファイルを、 プロジェクトリンカー 設定の 追加の依存関係 フィールドに追加する必要があります。
ライブラリに対してリンクするには、次のいずれかを実行できます。
- プロジェクトに一覧表示->プロパティ...->リンカー、入力->追加の依存関係 (VC ++ディレクトリでは、フルパスではなく.lib名のみを使用できます)、
- ライブラリプロジェクトをアプリに追加します。ソリューション(ソリューションで、右クリック->追加->既存のプロジェクト...)、プロジェクトを使用-> [プロジェクトの依存関係...]をクリックし、ライブラリプロジェクトを確認します(ドロップダウンでアプリケーションプロジェクトが選択されていることを確認します)。これはおそらく、両方のプロジェクトを編集する場合に最適な方法です。VC++は、アプリをビルドする前にライブラリが変更された場合、ライブラリを再構築するためです。
-
VC ++のみを使用することが確実な場合、
#pragma comment(lib,"C:\\path\\to\\library.lib")`
(@ Nilsに感謝)
NB:ライブラリソリューションフォルダーを 'include'ディレクトリ内に配置するのは非常に奇妙に思えます。これは、*。h(または他の #include
dファイル)を対象としています。
コマンドラインから:
cl / EHsc {objfiles} + /リンク / LIBPATH:LibraryFolder Library.lib
{objfiles} +は、1つ以上のオブジェクトまたはcppファイルを意味します。
ヘッダーファイルを含めると、VCはライブラリを単にリンクしません。
ライブラリを使用するようリンカーに指示する必要があります。正当な理由:ライブラリフォルダーには数千のライブラリがすでに存在します。プログラムをリンクするたびにMSVCがそれらすべてを検索しなければならなかった場合、メガバイト単位のデータをたどる必要があります。
これにはかなり時間がかかるため、デフォルトでは実行されません。
VCの場合、ソース内のリンカーにヒントを与えることもできます。そのためには、ソースコードのどこかに次の行を追加します(libのヘッダーが適切な場所である可能性があります)。
#pragma comment(lib,"c:\\path_to_library\\libname.lib")
これはプラットフォームに依存しませんが、MSVCを使用してプロジェクトに自動的にリンクされるライブラリを取得する最も便利な方法です。
別の方法は、プロジェクト設定にリンカを追加するだけです。関連情報は、プロジェクトのリンカ設定で見つけることができます。 libをリリースに追加し、構成をデバッグすることを忘れないでください。