静态提升/ MT发布?

时间:2013-04-01 13:39:50

标签: c++ boost static-libraries boost-asio mt

我使用以下命令编译并运行了bjam甚至b2.exe:

bjam --with-system --with-thread ..etc

我的库文件为:

libboost_system-vc110-MT-1_53.lib
libboost_system-vc110-MT-GD-1_53.lib

问题在于,一旦我说明了目录并将其链接到我的项目中,就会一直说版本不匹配:在项目/ MTRelease中找到/ MDRelease。

是的,我的项目与/ MT发布是静态链接的,这就是我需要的东西,但是提升给我带来了麻烦。 有任何想法吗?谢谢。

2 个答案:

答案 0 :(得分:1)

这听起来像版本问题。您获得的错误表明某些组件是使用一组库构建的,而其他组件是使用一组不同的库构建的。

如果要使用不同类型的库构建其他使用此代码的组件,例如MT(多线程 - 无调试)或MDd(dll的多线程调试),则可能会出现此错误。如果您使用错误的Boost库链接,也可能会出现此错误。您需要使用在自己的代码中使用的相同类型的库进行构建。如果您正在使用MTD,那么也可以使用MTD版本的Boost库进行构建。

要查看项目正在使用的库,请在“解决方案资源管理器”窗口中右键单击项目,然后选择属性。也可以从项目菜单中选择属性,但在执行此操作之前,请确保在该项目中有一个文件,因为当前文件在编辑窗口中打开。在运行时库下,您将看到正在使用的库的类型。如果项目类型是一个dll,那么这个值应该真的设置为MDd。要查看它是什么类型的项目,请单击属性下的链接器(或库管理器)选项,如果输出文件是dll,则项目类型为dll。如果它表示库或exe,那么项目分别是库或exe。您应该以相同的方式构建给定类型的所有项目。例如,您不应该尝试混合和匹配发行版和调试版。如果您正在构建一个exe,那么使用用于构建库类型项目的任何库。要设置库,请在属性下选择配置属性/ C / C ++ /代码生成/运行时库,然后从下拉框中选择一种类型。

如果配置对于所有项目都是正确的,那么请尝试从头开始重建。这可以通过右键单击项目并选择clean,然后选择rebuild来完成。

运行b2.exe来构建lib时,如果遇到错误,我总是使用-q选项使其停止。如果构建中存在错误,有时很难看到它们,因为b2有很多输出。有关与b2关联的选项列表,请参阅此link

另请注意,文件libboost_system-vc110-mt-1_53.lib只能用于VS 2012项目。如果您没有使用VS 2012,那么您需要做两件事。首先,您可能无法在2012之前的任何版本的Visual Studio中使用升级版本1.53或更高版本,因为2012年是第一个最能支持最新版C ++标准的版本。所以,你可能不得不使用1.52。您需要做的第二件事是在b2中指定您使用工具集选项的Visual Studio版本(例如--toolset = msvc-10.0 - 如果使用VS 2010),以便它将构建正确的库对你而言。

答案 1 :(得分:0)

您需要构建静态库。这样就可以了:

bjam --build-type = complete