64位win7下vs2010怎么编译出32位程序

64位win7下vs2010怎么编译出32位程序,第1张

早期在vs2008上的一个测试,希望能够帮助你

一、win32改为x64编译

我采用了vs2008平台,以下都是基于此平台将win32编译改为x64编译

这里以Debug模式为例,起初为Win32平台,要改成x64,如果有可直接选择,否则需要新建,之后为。

然后打开vs的项目->属性->配置属性->连接器,

在“高级”选项中,目标计算机为MachineX64(/MACHINE:X64)。

在“命令行”选项中,将X86改为X64.

平台选择x64,若没有则新建之.

在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

 64位可以编32位的程序出来,在各种FLAGS中增加 -m32 编出来的就是32位程序,连接时自然是找32位的共享库

这个要看发行版对32位支持的实现,比如gentoo下如果开abi支持双架构那很可能悲剧,因为有些包还没跟上,如果用binary的32位库又会因为版本不同出现莫名其妙的问题,比如fontconfig的坑。

我在64位编32位程序都是使用chroot的方法,这样就可以把32位的头文件库什么的全放在某个地方。我用的是ubuntu,32位库和64位库位置不一样,一般可以直接安装32位的库,如果遇到某些比较特殊的库,一般都可以通过重新编译增加rpath解决,如果没源码也可以用patchelf直接给elf上rpath。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11077649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存