使用Qt Creator进行Boost开发

4

我试图在使用QtCreator制作的C++项目中使用boost/filesystem。 问题是,在构建时,我遇到了以下错误:

"error: undefined reference to `boost::system::generic_category()'"

使用 boost,我执行了以下操作:
  • 下载 boost 库 boost_1_73_0.7z 文件。
  • 解压它在我的电脑上 (在 D:\Development\Boost 下)。
  • 在 .pro 文件中,我添加了以下选项:

    INCLUDEPATH += D:/Development/Boost

  • 在我的 .cpp 文件中,我添加了以下包含:

    #include "boost/filesystem.hpp"

  • 此时,当编译时,我在 Qt creator IDE 中遇到了以下错误:

    "error: undefined reference to `boost::system::generic_category()'"

根本原因是:需要构建FileSystem。因此,我通过以下方法构建了这个 boost 库:

  • 将 gcc 和 g++ 添加到 path 变量中(成功后,我可以在命令提示符中使用 'g++' 和 'gcc')。
  • 打开 Qt 命令提示符(我使用的是 Qt 5.15.0(MinGW 73.0 64-bit)),并导航到安装 boost 的目录。

enter image description here

  • 在目录(D:\Development\Boost)的命令提示符中执行以下命令:bootstrap gcc

enter image description here

  • 在我解压 Boost 的目录下的命令提示符中执行以下命令:b2 toolset=gcc link=shared threading=multi --build-type=complete stage。这个操作创建了一个目录 D:\develoment\Boost\Stage\lib,包括 'libboost_filesystem-mgw8-mt-d-x64-1_73.dll'。

  • 现在是将库链接到 Qt creator 的时候了。因此,我在我的 .pro 文件中添加了以下内容:

    LIBS += -LD:/Development/Boost/stage/lib libboost_filesystem-mgw8-mt-d-x64-1_73

编译时,错误消失了。

感谢您的帮助。 Gatien


你编译了Boost吗?尽管Boost包含仅包含头文件的库,但它也包含需要编译的库。 - drescherjm
这会有所帮助:https://dev59.com/aGIj5IYBdhLWcg3wb0rX,请注意构建当前版本,而不是许多年前的1.55版本。 - drescherjm
1个回答

2
如@drescherjm所评论的,你需要构建boost库。
它们不在D:/Development/Boost/libs目录中。 你似乎正在使用Windows,并在“D”驱动器上安装了boost。
我假设你使用的是Qt Creator附带的MinGW编译器,而不是Visual Studio。 要使用MinGW构建boost,请首先打开相关的Qt命令提示符,例如Qt 5.12.3(MinGW 7.3.0 64位),然后输入以下内容:
D:
cd \Development\Boost
bootstrap.bat gcc
b2 toolset=gcc link=shared threading=multi --build-type=complete stage

这将在您的目录中构建MinGw boost库:D:\Development\Boost\stage\lib
然后将链接命令更改为:
LIBS += -LD:/Development/Boost/stage/lib -l boost_system-mgw73-mt-x64-d-1_66

注意:在您的版本中,boost_system库的确切名称取决于boost如何命名它。
请参见Windows上的Boost入门:库命名。 这里的答案:mingw-w64找不到-lboost_filesystem以及您在D:\Development\Boost\stage\lib目录中构建的文件名。

你在我回答之前更新了你的问题,时间真是太巧了!你只编译了 boost-filesystem,还需要编译 boost-system - kenba
到目前为止,我的步骤正确吗?与此同时,我已经撤销了所有操作,并完全按照您的步骤进行。我会看看它带来了什么。我不介意一遍又一遍地撤销和重做,直到它成功为止 :-D - gdebast
无法工作。在Qt Creator中,我得到了以下错误提示:“error: cannot find -lboost_system-mgw73-mt-x64-d-1_73”。 - gdebast
是的,你目前的步骤是正确的。不要撤销所有操作,只需构建 boost-system:b2 toolset=gcc system,然后尝试链接你的程序。 - kenba
我已经构建了“system”并添加了“LIBS += -LD:/Development/Boost/stage/lib -l boost_system-mgw73-mt-x64-d-1_73”。现在出现错误:“error: cannot find -lboost_system-mgw73-mt-x64-d-1_73”。有什么想法吗? - gdebast
显示剩余3条评论

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