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

C++ GCC-m32标志:/usr/bin/ld:跳过不兼容,c++,gcc,linker,shared-libraries,32bit-64bit,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 以及获取如下错误消息: g++ -m32 -shared source.cpp -l 64_bit_library.so -o 32_bit_l

在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
以及获取如下错误消息:

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位库。So
32位库。So
应该在64位主机上编译,以使
32位库成为可能。So
可以链接到
64位库。所以

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

这样想:如果我有一个C平凡函数:

extern void foo(void*); 
如果它在64位库中,我试着从32位库调用它,指针的另一半来自哪里


相反,如果它在32位库中,我从64位应用程序调用它,那么指针的另一半会发生什么情况?如果你真的很小心,你可能会玩一些带有typedef、带有MAP_32位标志的mmap和共享内存段的游戏,但这是非常麻烦的!你能告诉我如何检查它是否不兼容吗?也许使用readelf?--@rzr-最简单的检查方法就是在共享对象上使用
file
命令,查看它是否与您试图使用gcc执行的操作相匹配。例如,您也可以使用
readelf-h
objdump-x
进行计算,但我发现
文件的输出更加简洁。