0

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

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

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

有什么线索吗?

4

2 回答 2

0

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

于 2013-06-21T14:28:24.233 回答
0

您似乎忘记使用-lpthread.

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

于 2013-06-21T09:45:03.317 回答