在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.so
和32_bit_library.so
,以使32_bit_library.so
与64_bit_library.so
相关联?
答案 0 :(得分:11)
无法将32位应用程序与64位库链接,反之亦然。问题是指针和类型通常不能在它们之间传递。通常,解决方法是生成另一个大小的子进程,并使用IPC与该进程进行通信。
以这种方式思考:如果我有一个简单的C函数:
extern void foo(void*);
如果它位于64位库中,我尝试从32位库中调用它,指针的另一半来自哪里?
相反,如果它在一个32位的库中,我从一个64位的应用程序中调用它会发生另一半指针的问题,我将失去它来调用它?