Visual Studio 2008、Windows764ビットを使用しています。
私は WinBGIm グラフィックライブラリを使用しています。
このライブラリには、いくつかの.objファイルが付属しています。 .libまたは.dllファイルはありません。
それらを静的な.libファイルと動的な.dllファイルに変換したいと思います。
ディレクトリ内のすべての.objファイルをコピーしました。
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\AMD64
ただし、次のコマンドは機能しません。
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\AMD64>lib.exe /out:bgiout.lib *.obj
Microsoft (R) Library Manager Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
LINK : fatal error LNK1104: cannot open file 'bgiout.lib'
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\AMD64>
どうやってするか?
はい、あなたはそれをすることができます、あなたがそれを持っているのとほとんど同じです。
C:\Code\bgi\obj>lib /out:libbgi.lib *.obj
LIB( lib.exe )は、静的ライブラリを作成するために使用されます。 LINK( link.exe/DLL )は、ダイナミックライブラリを作成するために使用されます(.dllとインポートライブラリ.libを作成します)。
C:\Code\bgi\obj>link /DLL /out:bgi.dll *.obj [additional libs]
link /DLL
コマンドを使用する場合、追加のWin32およびC++標準ランタイムライブラリ(MSVCRT.libおよびUser32.libなどおよびMFCライブラリなど)が必要になります。
この場合;これは正しいリンカー引数のようです。
C:\Code\bgi\obj>link /DLL /out:bgi.dll *.obj MSVCRTD.lib User32.lib Gdi32.lib ole32.lib Comdlg32.lib OleAut32.lib
注:ビルドされたオブジェクトファイルはデバッグバージョンであるため、ここで使用するのはMSVCRTD.lib(Dに注意)です。上記のコマンドを使用して、.dllと静的.libの両方を正常にリンクすることができました。
追加のインクルードパスとライブラリパス。
これらの出力を他のビルドに配布する場合、追加のヘッダーとライブラリパスをターゲットビルドに含める必要がある場合があります。インクルードおよびライブラリ検索パスに場所を追加するには、環境変数(INCLUDE
およびLIB
)を(ユーザーごとまたはシステム全体で)追加できますが、これらはで指定することもできます。次のように /I
および /LIBPATH
を介したコマンドライン。
cl /IC:\Code\include [additional options] main.cpp
link /LIBPATH:C:\Code\lib [additional options] xyz.lib
ガイドライン;
エラーLNK1104
あなたが持っているエラー LNK1104 は、ユーザーが「ProgramFiles」ディレクトリ内にファイルを書き込むための十分な権限を持っていないことが原因である可能性が高いと思います。それ以外の場合は、ターゲットに不適切なツールチェーンを使用するとエラーになる可能性があります(x86とx64)。
通常は、独自のディレクトリでこれを行うことをお勧めします。例: "C:\ Code\bgi"。
最新のC++コンパイラは、必要なライブラリに関する情報を埋め込みます。 Visual Studioの場合、.objファイルには依存するC++ライブラリ(/ MT/MD/MTd/MDd)への参照が含まれています。これらのライブラリの実装はわずかに異なり、互換性がありません。唯一の選択肢は、サポートされているビルドモードごとにソースコードまたは複数の.objファイルを用意することです。