MacOS Big Sur下Conda环境编译C++项目出现!tapi-tbd错误如何解决
问题原因
该错误由Conda环境内置的ld链接器版本过低导致:MacOS Big Sur起系统SDK使用了新版TBD v4格式的描述文件,而Conda默认自带的ld链接器仅支持TBD v2/3版本,无法解析新格式的文件。
解决方法
- 方案1:优先使用系统原生链接器替代Conda内置ld
临时生效(仅对当前终端会话有效),执行以下命令设置环境变量:
永久生效(对当前Conda环境永久生效):先激活对应Conda环境,再执行以下命令:export LDFLAGS="-L/usr/lib" export CC=/usr/bin/clang export CXX=/usr/bin/clang++
操作完成后重新激活环境即可生效。conda env config vars set LDFLAGS="-L/usr/lib" conda env config vars set CC=/usr/bin/clang conda env config vars set CXX=/usr/bin/clang++ - 方案2:升级Conda环境内的工具链
激活对应Conda环境后,更新ld对应的cctools包到支持TBD v4的版本:
973及以上版本的cctools已经适配了TBD v4格式,可直接解决解析错误。conda install -c conda-forge cctools=973.0.1 - 方案3:指定低版本兼容的SDK编译
如果保留有MacOS Catalina(10.15)或更低版本的SDK,可在编译时指定旧SDK路径规避问题:
旧版本SDK使用的是TBD v3格式,可被旧版ld正常解析。export SDKROOT=/path/to/old/MacOSX.sdk
验证步骤
配置完成后重新执行项目编译操作,确认无!tapi-tbd相关报错即可。
内容的提问来源于stack exchange,提问作者thomaskeefe
相关产品推荐
相关产品推荐

