我正在尝试构建一个包含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-mt
或Boost::fiber
,结果总是出现同样的错误。
你知道为什么这个符号是未定义的吗?同样的代码在ubuntux86_64上可以完美地工作。
我试着在make中手工包含库,但符号总是未定义的。
1条答案
按热度按时间w46czmvw1#
不幸的是,可能不是你想要的答案,但是我在安装
brew
时也有过同样的经历,但是我自己成功地构建了boost库,从here下载并按照here的安装说明操作。