编译过程中关于 boost 静态库的链接错误"undefined reference"
Linking error "undefined reference" about boost static library during compiling
我正试图在Linux x64上使用boost库1.57编译我的C++项目。
这个项目是用scons编译的,我在我的Arch Linux上成功地编译了它,但这次在Ubuntu机器上失败了。
我为链接添加了-lboost_coroutine
标志,但错误"未定义引用"仍然存在。
/usr/bin/g++ -o build/gcc.release/app -pthread -g
build/gcc.release/src/han/unity/rpcx.o
-lpthread -lz -lboost_coroutine -lboost_context -lboost_date_time
build/gcc.release/src/han/unity/rpcx.o: In function `attributes':
/usr/local/include/boost/coroutine/attributes.hpp:31: undefined reference
to `boost::coroutines::stack_traits::default_size()'
我注意到attributes.hpp正是boost协程头文件之一。我试着用nm来提升协同程序库,这似乎没有问题。
nm /usr/local/lib/libboost_coroutine.a | grep "default_size"
0000000000000170 T _ZN5boost10coroutines12stack_traits12default_sizeEv
我搜索了这个错误的可能原因,大多数是关于链接器标志的顺序。在这种情况下,rpcx.o依赖于boost_coroutine,所以它出现在前面。
原因还有哪些?
经过几个小时的努力,我终于解决了这个问题
原来是旧的boost(v1.55)库仍然存在,它有与我手动安装的boost库(v1.57)同名的静态库。链接器在v1.57之前发现了v1.55静态库,所以它使用这些库进行链接。然而,在旧版本中,函数boost::coroutines::stack_traits::default_size()
仍然没有被引入,这使得链接器无法找到该函数的正确位置,并返回"未绑定引用"。
对于那些碰巧在编译过程中从谷歌搜索"未定义引用"错误中发现这些问题的人,我了解了调试这类问题的几个步骤,并在这里为您提供了信息。
-
检查链接的库是否存在于
/usr/lib/
或/usr/local/lib/
中,如果不存在,请尝试先安装这些库。 -
检查是否为引用的库添加了正确的链接标志。例如,如果使用boost_coroutine库,请确保在链接期间添加
-lboost_coroutine
。 -
检查链接标志的顺序是否正确(对于gcc)。这可能是大多数情况的原因。如果B依赖于A,请确保将B放在A前面。
-
检查同一库是否存在不同的版本。
我希望这些能有所帮助。
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 使用cmake错误链接boost日志
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- clang:错误:链接器命令失败,C++代码中的退出代码为 1(使用 -v 查看调用)
- 静态库中的 g++ 错误链接函数
- 未定义的参考错误链接天然函数Android
- C++编译错误:ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v
- QT Q_PROPERTY错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- OSX MOJAVE -LD:架构X86_64 clang找不到符号:错误:链接器命令失败,出口代码1
- C 错误链接器命令失败了出口代码1(使用-V查看调用)
- LD:架构x86_64 clang找不到符号:错误:链接器命令失败,出口代码1(使用-v to See
- 聚输出错误 - 链接列表
- Xcode链接器错误:链接器命令失败,退出代码为1(使用-v查看调用)
- 尝试构建C DLIB示例无法与数百个未定义的参考错误链接