【问题标题】:Undefined reference to `boost::filesystem::path::make_preferred() wat fix?对 `boost::filesystem::path::make_preferred() 的未定义引用是否修复?
【发布时间】:2021-06-18 09:26:55
【问题描述】:

您好,我正在尝试从 boost C++ 构建一个demo example 构建时出现以下错误

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】:
    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

    【讨论】:

      猜你喜欢
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2016-06-02
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多