我在Debian Linux(64位)上编译C++,需要能够为另一个系统编译32位。这些二进制文件无法在我的64位系统上运行,让它们在那里运行更加方便进行测试。
我的C++测试代码是
我使用的编译命令是
我已经做了很多搜索来尝试解决此问题,并安装了apt:libc6:i386、libncurses5:i386 和 libstdc++6:i386。
如果您有其他想法来解决这个问题,将不胜感激。
我的C++测试代码是
int main() { std::cout << "This is Main.cpp" << std::endl; }
,使用了iostream,所以没有什么花哨的东西。我使用的编译命令是
g++ -m32 Main.cpp
当我执行./a.out
时,我得到-bash: ./a.out:无法执行二进制文件:Exec format error
。我已经做了很多搜索来尝试解决此问题,并安装了apt:libc6:i386、libncurses5:i386 和 libstdc++6:i386。
如果您有其他想法来解决这个问题,将不胜感激。
file ./a.out
告诉你什么?你能运行 64 位二进制文件(没有-m32
编译)吗? - Hadi Brais-m32
,当我使用-m32
编译以获取32位 a.out 时,我执行file a.out
命令后得到的结果是a.out: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e1483a60a1b26d9b3738bb963e90e713b515031b, not stripped
。 - G3yostELF 32-bit LSB可执行文件...
而不是ELF 32-bit LSB共享对象...
为什么编译器会生成一个共享对象?它应该生成一个可执行文件。使用./a.out
无法运行共享对象。 - Hadi Brais-m32
和-m64
可执行文件上比较file
。我迫不及待地想要深入探究这个问题。谢谢! - G3yost