未定义的符号:_ZL22__gthrw_pthread_cancelm错误

时间:2013-06-21 09:03:20

标签: c++ c linux cross-compiling x86-64

我有一个C ++ / C应用程序需要编译为32位应用程序(因为某些第三方库只能用于32位)。但是,编译和执行将在CentOS 6.4 x86_64机器上进行。

我正在使用gnu autotools进行构建。在进行了大量的谷歌搜索后,最终想出了一组选项,让./configure创建32位可执行文件/共享对象。设置LD_LIBRARY_PATH/lib, /usr/lib/, /usr/lib/gcc/...而不是/lib64, ...进行搜索。使用file命令验证所有生成的.so和可执行文件是否为32位。

但是我收到错误:“undefined symbol: _ZL22__gthrw_pthread_cancelm”如果我运行可执行文件。

任何线索?

2 个答案:

答案 0 :(得分:0)

您似乎忘记使用-lpthread链接到pthreads。

GCC添加了layer of abstraction over pthreads,这个抽象使用弱符号,因此您可以构建可执行文件而不会出现链接错误,但在运行时会失败。

答案 1 :(得分:0)

目标主机上是否有32位pthread库?如果没有,我想你需要安装一个。还要检查目标主机上ldd <my-program>的输出,这可能会帮助您找出丢失的内容。