Visual Studio C ++ 2008 Expressの使用:
次のようにコンパイルされたビルドで最後のリンクステップを実行しようとしています。
ライブラリ
foo.libは、スイッチを使用して静的にコンパイルされます(ビルドはを生成しません.dll)/MD。のビルドはfoo.lib成功します。ファイルとヘッダーは.lib、以下のライブラリのプロジェクトがそれらを見つけることができるディレクトリに出荷されます。foo.libソースはアンマネージC++で記述されています。ライブラリは、スイッチ
bar.dllを備えたダイナミックライブラリとしてコンパイルされます。エクスポートされたシンボルに依存します。とは両方とも、VS2008Expressツールチェーンの同じバイナリとバイナリを使用してソースから構築されます。ソースはアンマネージC++で記述されています。/MD /LDbar.dllfoo.libbar.dllfoo.libcl.exelink.exebar.dllビルドのすべての
.objファイルはbar.dll正常にビルドされますが、それを最後に実行link.exeするとbar.dll、未定義の外部ファイルに関する何千ものエラーが発生します。LNK2001未定義の外観はすべて、標準C ++ライブラリにあると私が期待するものです。std::basic_stringコンストラクター、std::_Throwクラス、ostreamオーバーロードされた演算子などです。未定義の外観は!内で未定義でlink.exeあると言いますfoo.lib目標は、
bar.dll静的にリンクされたコード全体foo.libとそれ自体のオブジェクトを含めることですが、実行時の存在/解決に動的に依存MSVCR90.dllしMSVCP90.dllます。
このビルドで不可能な状況を設定しようとしていますか、それとも単に何か間違ったことをしていますか?これが理論的にまったく機能しない場合は、私に知らせてください。foo.libそれ以外の場合は、最後のリンク手順でC++ライブラリシンボルを使用できない理由を特定するためにどのような診断を試みることができるかを教えてください。
編集:より具体的な情報:LLVM 3.1でありfoo.lib、ブランチからのMesaの()ビルドです(目標はで実行されるものを生成することです)。次のように、すべてのビルド依存関係を満たしました。bar.dlllibgl-gdillvmpipemasteropengl32.dllllvmpipe
- LLVMビルドは、ビルドシステムとしてのCMakeとPython2.7に依存しています。
- Mesaビルドは、ビルドシステムとしてSCons、LLVM 2.6以降、Python 2.7、pywin32、python-libxml2、bison、およびflexに依存しています。上記のうち、実行時にLLVMのみが出荷されます。残りは、ビルドプロセス中に使用される単なる「ツール」です。
また、プロジェクトごとにビルドをカスタマイズして、環境変数を設定し、スイッチのみを一貫して使用し/MD、/MT間違ったCランタイムライブラリを選択するために他のスイッチを使用しないようにしました。