使用boost编译时出现错误

4
我写了一个使用<boost/thread/locks.hpp>的项目,我已经将include目录添加到Additional Include directories中,并将lib文件夹添加到链接器中。但是当我尝试构建解决方案时出现错误:

Error 1 error LNK1104: 无法打开文件“libboost_thread-vc100-mt-sgd-1_50.lib”

我在lib目录中搜索了这个文件,但在lib目录中没有这个文件。我找到了一个类似名字的文件libboost_thread-vc100-mt-gd-1_50

我做错了什么?


你已经安装了这些库或者构建了它们,并且将其包含到你的项目中了吗? - mathematician1975
我按照指南http://www.boost.org/doc/libs/1_50_0/doc/html/bbv2/installation.html构建了它们。 - Robert
你使用的操作系统和编译器是什么? - mathematician1975
我使用的是Visual Studio 2010旗舰版。操作系统为Windows 7 x64。 - Robert
1个回答

8
您的问题似乎与这个问题非常相似。根据这里描述的命名约定,链接器想要使用的库与您拥有的库唯一的区别在于前者静态链接到C++标准库和编译器运行时支持库。我能想到两种解决此问题的方法:
  1. 获取链接器想要的库
    a. 如果您使用了boostpro安装程序:

    确保您勾选了Multithreaded debug, static runtime(我建议您全部勾选)

    b. 如果您自己构建了库:

    打开命令行窗口
    更改目录到您的boost根目录
    下面的命令将构建所需的库:
    b2 toolset=msvc-10.0 --with-thread address-model=64 variant=debug link=static runtime-link=static runtime-debugging=on stage
    (我建议使用:
    b2 toolset=msvc-10.0 address-model=64 --build-type=complete stage

  2. 让链接器使用您想要的库
    a. 让自动链接使用共享库

    您可以在头文件包含之前(或更好地在VC项目预处理器设置中)定义BOOST_THREAD_DYN_LINK(仅影响线程库)或BOOST_ALL_DYN_LIB(影响所有boost库)。这将使链接器尝试使用库boost_thread-vc100-mt-gd-1_50.lib(请注意,lib-前缀已省略)。

    b. 禁用自动链接

    您可以定义BOOST_ALL_NO_LIB,然后在您的链接器选项中添加您的库的确切名称


你是指要运行这个吗: 1)bootstrap.bat 2)b2 install --prefix=PREFIX runtime-link=static? - Eyalk
@Eyalk,评论中Robert提供的链接页面似乎是您所参考的,该页面描述了Boost.Build二进制文件的安装。在此步骤中,您不应添加runtime-link=static。安装完Boost.Build后,您需要构建Boost库。在这一步骤中,您需要将其添加到命令中。我会尝试编辑答案以使其更清晰明了。 - user1252091

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接