如何使用CGO链接基于LLVM的libc++构建的C++静态库
你当前的编译命令存在两个核心问题:静态链接libc必须连带链接libcabi,且你的命令中链接参数顺序不符合静态编译要求。按照以下步骤调整即可:
- 先确认系统已安装libc++、libc++abi的静态开发库,Debian/Ubuntu系发行版可安装
libc++-dev、libc++abi-dev包,其他发行版对应安装同名软件包即可。 - 调整编译命令,补充
-lc++abi参数,同时优化链接参数顺序,调整后的命令如下:
CGO_CXXFLAGS="-stdlib=libc++ -I/usr/lib/clang/12.0.0/include -I/usr/local/include -I/usr/include" CGO_LDFLAGS="-stdlib=libc++ -L/usr/lib/clang/12.0.0/lib -L/usr/local/lib -L/usr/lib -L/usr/lib/x86_64-linux-gnu -lpthread -lrt -lc++ -lc++abi -lm" go test --ldflags '-extldflags "-static"' -c -a .
- 如果调整后仍出现链接报错,可在编译命令末尾添加
-v参数输出详细日志,排查是否存在头文件版本和库版本不匹配、静态库缺失的问题。
内容的提问来源于stack exchange,提问作者darkdragon
相关产品推荐
相关产品推荐

