GCC -m32标志:/ usr / bin / ld:跳过不兼容

时间:2010-10-29 13:58:42

标签: c++ gcc linker shared-libraries 32bit-64bit

在64位主机上,我尝试使用-m32选项构建共享库。这些库是否可以与常规的64位库链接?

我正在做这样的事情:

g++ -m32 -shared source.cpp -l 64_bit_library.so -o 32_bit_library.so

并收到如下错误消息:

/usr/bin/ld: skipping incompatible 64_bit_library.so

所以我的问题是:如何在64位主机上编译64_bit_library.so32_bit_library.so,以使32_bit_library.so64_bit_library.so相关联?

1 个答案:

答案 0 :(得分:11)

无法将32位应用程序与64位库链接,反之亦然。问题是指针和类型通常不能在它们之间传递。通常,解决方法是生成另一个大小的子进程,并使用IPC与该进程进行通信。

以这种方式思考:如果我有一个简单的C函数:

extern void foo(void*); 

如果它位于64位库中,我尝试从32位库中调用它,指针的另一半来自哪里?

相反,如果它在一个32位的库中,我从一个64位的应用程序中调用它会发生另一半指针的问题,我将失去它来调用它?