在 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
?
最佳答案
无法将 32 位应用程序链接到 64 位库,反之亦然。问题是指针和类型通常不能在它们之间传递。通常,解决方法是生成其他大小的子进程并使用 IPC 与该进程通信。
这样想:如果我有一个 C 普通函数:
extern void foo(void*);
如果它在 64 位库中,我尝试从 32 位库中调用它,指针的另一半来自哪里?
相反,如果它在 32 位库中并且我从 64 位应用程序调用它,指针的另一半会发生什么情况,我必须丢失才能调用它?
关于c++ - GCC -m32 标志 :/usr/bin/ld: skipping incompatible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4052542/