c++ - 对 `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' 的未定义引用
从我在互联网上找到的内容来看:this、this和this 我需要使用 C++11 支持重建 boost 并通过明确指定标准来构建我的项目。
我通过运行再次构建了 boost:
C:\boost>b2.exe 工具集=gcc cxxflags="-std=c++11"
在构建我的项目时,我将添加一个密钥
-std=c++11
但是我得到了所有相同的错误,并且来自互联网的提示对我不起作用,告诉我如何克服这个问题?
解决方案
您正在尝试链接使用 microsoft 编译器构建的 boost 库。这就是库文件名称中的“vc142”的含义。这行不通,您必须使用您计划用于构建应用程序的相同编译器来构建 boost。
库应该使用“-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
推荐阅读
- c++ - 使用背景减法去除阴影以进行静止物体检测
- c# - C#确定满足哪个条件
- github - Github Actions 恢复的缓存没有被使用
- xml - 如何省略外部 XML 元素的名称
- google-cloud-functions - 从 Cloud Function 本身获取 Cloud Function 名称
- python - 是否有经验法则可以知道我是在修改值还是引用值?
- java - 尝试保存到 MySQL 日期时出现 JpaRepository SQL 语法错误
- javascript - 通过studentId字段过滤唯一学生对象的javascript不可变过滤器
- asp.net-core - 分布式 IdentityServer4 .net 核心(多实例)问题 HttpContext 不能为空
- java - 使用应用程序属性动态创建 bean