c++ - GCC -m32 标志 :/usr/bin/ld: skipping incompatible

标签 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.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/

相关文章:

c++ - 泛化 C++ 模式

c++ - 架构 x86_64 的 undefined symbol - Mavericks (Yosemite, El Capitan...)

c++ - 在没有静态链接的情况下使用 Winsock

c++ - header 问题中的 C/C++ 命名空间

c++ - 如何从 C++ 中的文本文件中获取特定行?

基于 C++ rest 的 Web 服务客户端实现

c - 用于为索尼阅读器 prs900 编译/交叉编译 gcc 的 binutils

c - 如何防止 strcpy() 被优化

C程序卡住,甚至不进入主程序

c++ - 如何链接使用 MSVC 和 AddressSanitizer 编译的程序