gcc g++ 使用哪些编译选项可以让编译出来的程序兼容32位和64位?

时间:2021-03-16 09:14:49
如题,当然有前提了,程序相当简单(基本上就是个helloworld),只使用了c标准库,我用static选项编译32位版本,拿到64位系统上运行会出现"/lib/ld-linux.so.2: bad ELF interpreter"的错误信息,查了一下说安装glibc.i686就可解决。但是我发现别人编译好的32位程序在我的64位系统上却运行正常,所以很想请教一下各位 

5 个解决方案

#1


楼主你应该是装了glibc.i686的。
或者别人的程序自己打包了所需的lib,我 曾经这么干过

#2


gcc没有针对32位和64位系统的编译选项,不过lz加了static禁用程序使用动态库,目测去掉static选项就可以了。

#3


引用 2 楼 songsong33 的回复:
gcc没有针对32位和64位系统的编译选项,不过lz加了static禁用程序使用动态库,目测去掉static选项就可以了。


去掉static兼容性反而不好了,各系统的动态链接库文件差异很大

我知道可以指定生成32位二进制文件或者64位二进制文件,我现在想达到的效果是一个32位程序在32位系统和64位系统上都能运行

#4


编译成32bit程序
系统上装32bit支持库就行了。比如ub上装ia32-libs

#5


-m32|-m64 指定编译的二进制对象的内存模型。

使用 -m32 来创建 32 位可执行文件和共享库。使用 -m64 来创建 64 位可执行文件和共享库。

http://docs.oracle.com/cd/E19205-01/821-0387/gewif/

#1


楼主你应该是装了glibc.i686的。
或者别人的程序自己打包了所需的lib,我 曾经这么干过

#2


gcc没有针对32位和64位系统的编译选项,不过lz加了static禁用程序使用动态库,目测去掉static选项就可以了。

#3


引用 2 楼 songsong33 的回复:
gcc没有针对32位和64位系统的编译选项,不过lz加了static禁用程序使用动态库,目测去掉static选项就可以了。


去掉static兼容性反而不好了,各系统的动态链接库文件差异很大

我知道可以指定生成32位二进制文件或者64位二进制文件,我现在想达到的效果是一个32位程序在32位系统和64位系统上都能运行

#4


编译成32bit程序
系统上装32bit支持库就行了。比如ub上装ia32-libs

#5


-m32|-m64 指定编译的二进制对象的内存模型。

使用 -m32 来创建 32 位可执行文件和共享库。使用 -m64 来创建 64 位可执行文件和共享库。

http://docs.oracle.com/cd/E19205-01/821-0387/gewif/