gpt4 book ai didi

c++ - 如何解决 MSCV 中 Boost 文件系统库的 LNK1104 错误?

转载 作者:可可西里 更新时间:2023-11-01 15:46:10 24 4
gpt4 key购买 nike

我无法让我的项目链接到 Microsoft Visual C++ 2008 Express Edition 中的 Boost(版本 1.37.0)文件系统 lib 文件。文件系统库不是只有头文件的库。我一直在关注 Getting Started on Windows 官方 boost 网页上发布的指南。以下是我采取的步骤:

  1. 我使用 bjam 构建了完整的 lib 文件集:

    bjam --build-dir="C:\Program Files\boost\build-boost" --toolset=msvc --build-type=complete
  2. 我复制了/libs目录(位于C:\Program Files\boost\build-boost\boost\bin.v2)到C:\Program Files\boost\boost_1_37_0\libs。

  3. 在 Visual C++ 中,在 Project > Properties > Additional Library Directories 下,我添加了这些路径:

    • C:\Program Files\boost\boost_1_37_0\libs
    • C:\Program Files\boost\boost_1_37_0\libs\filesystem\build\msvc-9.0express\debug\link-static\threading-multi

    出于绝望,我添加了第二个。它是 libboost_system-vc90-mt-gd-1_37.lib 所在的确切目录。

  4. Configuration Properties > C/C++ > General > Additional Include Directories 中,我添加了以下路径:

    • C:\Program Files\boost\boost_1_37_0
  5. 然后,为了锦上添花,在工具 > 选项 VC++ 目录 > 库文件 下,我添加了在步骤 3 中提到的相同目录。

尽管如此,当我构建我的项目时,我收到以下错误:

fatal error LNK1104: cannot open file 'libboost_system-vc90-mt-gd-1_37.lib'

此外,这里是我尝试编译的代码以及上述目录的屏幕截图,其中(假设是正确的)lib 文件所在的目录:

#include "boost/filesystem.hpp"   // includes all needed Boost.Filesystem declarations
#include <iostream> // for std::cout
using boost::filesystem; // for ease of tutorial presentation;
// a namespace alias is preferred practice in real code

using namespace std;

int main()
{
cout << "Hello, world!" << endl;

return 0;
}

最佳答案

Ferruccio 的回答包含了大部分见解。然而,Pukku 让我意识到了我的错误。我发布了自己的答案以给出完整的解释。正如 Ferruccio 解释的那样,文件系统依赖于两个库。对我来说,这些是:

  • libboost_system-vc90-mt-gd-1_37.lib
  • libboost_filesystem-vc90-mt-gd-1_37.lib

我一定没有注意到,当我为 libboost_filesystem-vc90-mt-gd-1_37.lib 提供目录时,错误输出从

fatal error LNK1104: cannot open file 'libboost_filesystem-vc90-mt-gd-1_37.lib'

fatal error LNK1104: cannot open file 'libboost_system-vc90-mt-gd-1_37.lib'

让我认为错误一直存在。这导致我发布了一些相当不准确的信息。此外,在阅读文件系统需要两个库之后,我现在明白了关键字 stage 对于 bjam 命令的重要性。供应

bjam --build-dir="C:\Program Files\boost\build-boost" --toolset=msvc --build-type=complete stage

使 bjam 在 boost_1_37_0 目录中放置一个额外的目录,恰本地命名为 stage。此文件夹包含一个名为 /lib 的文件夹,其中包含所有 lib 文件的拷贝。这对于 Visual C++ 来说很方便,因为您可以为它提供这个单一目录,它会处理所有依赖项。

关于c++ - 如何解决 MSCV 中 Boost 文件系统库的 LNK1104 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/470840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com