2

VC 用にコンパイルされた静的にリンクされたブースト (C:/boost のような場所) を使用する単純なプロジェクトを作成するにはどうすればよいですか? プロジェクト ファイルはどのようになりますか?

.proに追加してみた

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

しかし、私は得る:

msvcprtd.lib(MSVCP100D.dll):-1: ERROR: LNK2005: "public: __thiscall std::_Container_base12::~_Container_base12(void)" (??1_Container_base12@std@@QAE@XZ) 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)" (??0_Container_base12@std@@QAE@XZ) 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)" (?_Orphan_all@_Container_base12@std@@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 用にコンパイルされたスタティック ブーストに正しくリンクするにはどうすればよいのでしょうか。

4

1 に答える 1

1

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

エラーは、プロジェクトが動的 CRT ライブラリとリンクしようとしていることを示しています。つまり、/MDandを使用して/MDdいます。これらが .pro ファイルで設定されている場合、それらはQMAKE_CXXFLAGS_RELEASEおよびQMAKE_CXXFLAGS_DEBUG変数の一部になります。ただし、それらはまったくリストされていない可能性があります-デフォルトでは動的CRTライブラリを使用することだと思います。

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

--runtime-link=sharedブーストをビルドするときに使用する必要があります (ただし、このオプションを使用して静的なブースト ライブラリを作成するために使用することはできます) 、.pro ファイルにandを--link=static追加/変更します。/MD/MDd/MT/MTd

于 2012-04-27T23:46:23.700 に答える