首页 > 解决方案 > 对 `boost::filesystem::path::make_preferred() 的未定义引用是否修复?

问题描述

嗨,我正在尝试从 boost C++构建一个演示示例,并且在构建时出现以下错误

g++.exe -Wall -fexceptions -std=c++11 -g -IC:\boost -c C:\api\api\main.cpp -o obj\Debug\main.o g++.exe -LC:\boost \stage\lib -o bin\Debug\api.exe obj\Debug\main.o C:\boost\stage\lib\libboost_system-vc142-mt-gd-x64-1_75.lib C:\boost\stage\lib \libboost_filesystem-vc142-mt-gd-x64-1_75.lib obj\Debug\main.o: 在函数main': C:/api/api/main.cpp:31: undefined reference to boost::filesystem::path::make_preferred()' C:/api/api/main.cpp:34:对boost::filesystem::path::begin() const' C:/api/api/main.cpp:34: undefined reference to boost::filesystem::path::end() const' 的未定义引用

从我在互联网上找到的内容来看:thisthisthis 我需要使用 C++11 支持重建 boost 并通过明确指定标准来构建我的项目。

我通过运行再次构建了 boost:

C:\boost>b2.exe 工具集=gcc cxxflags="-std=c++11"

在构建我的项目时,我将添加一个密钥

-std=c++11

但是我得到了所有相同的错误,并且来自互联网的提示对我不起作用,告诉我如何克服这个问题?

标签: c++boost

解决方案


  1. 您正在尝试链接使用 microsoft 编译器构建的 boost 库。这就是库文件名称中的“vc142”的含义。这行不通,您必须使用您计划用于构建应用程序的相同编译器来构建 boost。

  2. 库应该使用“-l”标志链接,或者采用这种形式:

-lboost_system-<compiler+version>-mt-gd-x64-1_75

省略路径(使用 -L 标志指定)、文件名中的“lib”前缀和文件扩展名。

或使用 '-l:',如:

-l:C:\boost\stage\lib\libboost_system-<compiler+version>-mt-gd-x64-1_75.so

通常,boost 使链接到正确的库是透明的,您不必指定要链接到的 boost 库的名称。您仍然需要使用 -L 标志指定 boost 库所在的位置。

如果您仍想明确声明要链接哪个库,“mt-gd”表示您正在将您的应用程序与多线程调试运行时库链接。这些选项必须与您用于构建应用程序的编译器和链接器标志相匹配。

有关指定用于构建 boost 库的工具集的详细信息,请参阅 boost 文档。 https://www.boost.org/doc/libs/1_75_0/more/getting_started/windows.html


推荐阅读