2

如何创建一个简单的项目,该项目将使用为 VC 静态链接的 boost 编译(类似于 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 编译的静态 boost?

4

1 回答 1

1

如果您使用该--runtime-link=static标志构建 boost,那么它们是针对静态 CRT 库编译的,即使用/MT(和/MTd用于调试的)编译器标志。

您的错误表明您的项目正在尝试与动态 CRT 库链接,即使用/MDand /MDd。如果这些设置在您的 .pro 文件中,它们将成为QMAKE_CXXFLAGS_RELEASEQMAKE_CXXFLAGS_DEBUG变量的一部分。然而,它们可能根本没有列出——我认为默认是使用动态 CRT 库。

您项目中的所有库都需要链接到同一个 CRT。

您需要--runtime-link=shared在构建 boost 时使用(尽管您仍然可以使用--link=static此选项创建静态 boost 库),或者在 .pro 文件中添加/更改/MDand/MDd/MTand /MTd

于 2012-04-27T23:46:23.700 回答