我有一个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
”如果我运行可执行文件。
任何线索?
答案 0 :(得分:0)
您似乎忘记使用-lpthread
链接到pthreads。
GCC添加了layer of abstraction over pthreads,这个抽象使用弱符号,因此您可以构建可执行文件而不会出现链接错误,但在运行时会失败。
答案 1 :(得分:0)
目标主机上是否有32位pthread库?如果没有,我想你需要安装一个。还要检查目标主机上ldd <my-program>
的输出,这可能会帮助您找出丢失的内容。