2012-04-26 6 views
2

VCのstaticalyリンクブースト(C:/ boostのような場所)のためにコンパイルされた単純なプロジェクトを作成するには?私のプロジェクトファイルはどのように見えますか?Qt + VS2010コンパイラ:VC staticalyリンクブースト用にコンパイルされた単純なプロジェクトを作成するには?

私は

INCLUDEPATH += C:/BOOST/include/boost-1_49 
DEPENDPATH += C:/BOOST/lib 
LIBS += -LC:/BOOST/lib -llibboost_system-vc100-mt-sgd-1_49 -llibboost_thread-vc100-mt-sgd-1_49 

を.PROするために追加しようとしましたが、私は得る:

msvcprtd.lib(MSVCP100D.dll):-1: ERROR: LNK2005: "public: __thiscall std::_Container_base12::~_Container_base12(void)" ([email protected]@@[email protected]) already defined in libboost_system-vc100-mt-sgd-1_49.lib(error_code.obj) 

msvcprtd.lib(MSVCP100D.dll):-1: ERROR: LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" ([email protected]@@[email protected]) already defined in libboost_system-vc100-mt-sgd-1_49.lib(error_code.obj) 

msvcprtd.lib(MSVCP100D.dll):-1: ERROR: LNK2005: "public: void __thiscall std::_Container_base12::_Orphan_all(void)" ([email protected][email protected]@@QAEXXZ) already defined in libboost_system-vc100-mt-sgd-1_49.lib(error_code.obj) 

:-1: WARNING: LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

debug\loader.exe:-1: ERROR: LNK1169: one or more multiply defined symbols found 

私はのような何かコンパイルしようとすると:

#include <QtGui/QApplication> 
#include <iostream> 

#include <boost/filesystem.hpp> 

int main(int argc, char *argv[]) 
{ 
    boost::filesystem::path p; 
} 

をだから私はどのように私はなら疑問に思います私の.prooファイルをVSコンパイラを使用しているQt Creatorを使ってVC用にコンパイルされた静的なブーストに正しくリンクするように変更しますか?

+1

追加機能のために、ヘッダーに特別な指示があり、リンカーが自動的に必要なライブラリにリンクします(Visual Studioの場合のみ)。私はマシン上のブーストに対して静的にリンクするために何もしません。ちょうどヘッダを含んでいます。 –

答えて

1

フラグを--runtime-link=staticに設定してブーストを作成した場合は、コンパイルフラグ/MT(およびデバッグ用には/MTd)を使用して静的CRTライブラリに対してコンパイルされました。

あなたのエラーは、プロジェクトが動的CRTライブラリとリンクしようとしていることを示しています。つまり、/MD/MDdを使用しています。これらが.proファイルに設定されている場合、それらはQMAKE_CXXFLAGS_RELEASEQMAKE_CXXFLAGS_DEBUG変数の一部になります。しかし、それらはまったく表示されないかもしれません - 私は、デフォルトでは動的CRTライブラリを使用すると思います。

プロジェクト内のすべてのライブラリは、同じCRTにリンクする必要があります。

あなたはどちらかは、ブーストを構築するとき(あなたはまだかかわらず、このオプションを使用して静的ブーストLIBSを作成するために--link=staticを使用することができます)--runtime-link=sharedを使用するか、またはあなたの.PROファイルに/MT/MTd/MD/MDdを変更/追加する必要があります。

関連する問題