未定义符号:_ZL22__gthrw_pthread_cancelm错误

undefined symbol: _ZL22__gthrw_pthread_cancelm error

本文关键字:pthread cancelm 错误 gthrw ZL22 符号 未定义      更新时间:2023-10-16

我有一个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 "如果我运行可执行文件。

什么线索吗?

似乎你忘记链接到pthreads与-lpthread

GCC在pthreads之上添加了一个抽象层,并且这个抽象层使用弱符号,因此您可以构建没有链接错误但在运行时失败的可执行文件。

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