64位linux编译32位程序
答案:3 悬赏:50 手机版
解决时间 2021-12-01 23:56
- 提问者网友:疯孩纸
- 2021-12-01 10:25
64位linux编译32位程序
最佳答案
- 五星知识达人网友:愁杀梦里人
- 2021-12-01 11:53
在64位的Linux下,gcc 编译 32 位程序需要添加参数 -m32 ,ld需要添加参数是 -m elf_i386。
1、Along with the -m32 flag in gcc, you may need to include the -melf_i386 flag for ld to properly link the 32bit object files to the 32bit libraries if you have both the 32bit and 64bit libraries.
2、 ld命令 ld命令是GNU的连接器,将目标文件连接为可执行程序。
3、举例:
gcc -m32 -o hello hello.c
gcc -m32 -c hello.o hello.c
ld -m elf_i386 -o kernel main.o hello.o
1、Along with the -m32 flag in gcc, you may need to include the -melf_i386 flag for ld to properly link the 32bit object files to the 32bit libraries if you have both the 32bit and 64bit libraries.
2、 ld命令 ld命令是GNU的连接器,将目标文件连接为可执行程序。
3、举例:
gcc -m32 -o hello hello.c
gcc -m32 -c hello.o hello.c
ld -m elf_i386 -o kernel main.o hello.o
全部回答
- 1楼网友:一叶十三刺
- 2021-12-01 13:24
装openSUSE 下32位需要的开发包追问可否具体一些?
- 2楼网友:话散在刀尖上
- 2021-12-01 12:37
这个比较麻烦。
首先你要装好全套的 32 位对应的开发编译支持环境和对应的运行环境,之后还要设置你这个软件编译时用 32 位的参数和 32 位的编译器。
你这个其实等同于交叉编译。追问使用gcc编译加上-m32就可以了。追答不全是追问可否具体一些?
加-m32编译和直接在32位系统下编译有什么区别?追答32 位系统,整个系统环境都是 32 位的。
-m32 是让 gcc 输出为 32 位的程序,但你需要保证整个需要的函数库也都是 32 位的,不然会出现链接库找不到的情况,而且有些系统,32 位函数库都放在 /lib32 和 /usr/lib32 里面,这个位置又和 32 位系统的地址不一样,不过这个问题一般没事,因为系统动态的会去找位置。
主要问题是 64 位环境下面,很多程序和函数库都是 64 位的,32 位的不一定全。
首先你要装好全套的 32 位对应的开发编译支持环境和对应的运行环境,之后还要设置你这个软件编译时用 32 位的参数和 32 位的编译器。
你这个其实等同于交叉编译。追问使用gcc编译加上-m32就可以了。追答不全是追问可否具体一些?
加-m32编译和直接在32位系统下编译有什么区别?追答32 位系统,整个系统环境都是 32 位的。
-m32 是让 gcc 输出为 32 位的程序,但你需要保证整个需要的函数库也都是 32 位的,不然会出现链接库找不到的情况,而且有些系统,32 位函数库都放在 /lib32 和 /usr/lib32 里面,这个位置又和 32 位系统的地址不一样,不过这个问题一般没事,因为系统动态的会去找位置。
主要问题是 64 位环境下面,很多程序和函数库都是 64 位的,32 位的不一定全。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯