gcc 架构arm64的Boost未定义符号

n53p2ov0  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(201)

我正在尝试构建一个包含Boost 1.65.1所需代码的项目。我使用Mac OS M1芯片组(arm64)
我用自制的brew install boost下载了boost
并且正确安装了版本1. 80. 0。我使用GCC G++(而不是Clang),我在我的Cmake中包含了这个库,所有的包含都工作正常,我的IDE能够找到所有的函数引用。
在代码的某些部分我使用了boost::this_fiber::sleep_for函数,
并且在编译时由链接器引发错误

Undefined symbols for architecture arm64:
  "_boost::fibers::context::wait_until(std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long, std::ratio<1l, 1000000000l> > > const&)", referenced from:
_void boost::this_fiber::sleep_for<long long, std::ratio<1l, 1000000l> >(std::chrono::duration<long long, std::ratio<1l, 1000000l> > const&) in libTest.a
ld: symbol(s) not found for architecture arm64

在我的例子中,我找到了Boost包并链接了所有Boost库。我甚至尝试手动添加-lboost_fiber-mtBoost::fiber,结果总是出现同样的错误。
你知道为什么这个符号是未定义的吗?同样的代码在ubuntux86_64上可以完美地工作。
我试着在make中手工包含库,但符号总是未定义的。

w46czmvw

w46czmvw1#

不幸的是,可能不是你想要的答案,但是我在安装brew时也有过同样的经历,但是我自己成功地构建了boost库,从here下载并按照here的安装说明操作。

相关问题