当前位置:首页 » 编程软件 » gcc64位编译

gcc64位编译

发布时间: 2023-01-07 20:41:10

Ⅰ x86-64上怎么安装GCC,编译32位和64位程序,谢谢。

如果大多数类unix系统应当是自带gcc的 编译程序时使用不同的参数就可以选择编译成64位或者32位. 如果要求性能,推荐使用icc

Ⅱ 64位UBUNTU 下 如何用GCC 编译出32位程序 求前辈指点

目测是32位的搜索路径下没有sys/cdefs.h
一般64位系统最好不要安装32位库的-dev,经常有冲突,强行安装会破坏64位环境,头文件并不像共享库分得那么完美。
我觉得比较好的做法是,重新把某一个文件夹当成rootfs,在里面安装各种32位的库和库-dev,然后给gcc传递参数"--sysroot=路径"就可以让gcc重新选取那个文件夹为rootfs,而不再认为/为rootfs。其实这样就变成交叉编译了。也可以在这个rootfs中安装32位的必要软件包如bash,gcc,coreutils等等,然后chroot进去就变成host编译了。其实有个比较简单的方法,就是虚拟机下安一个32位的ubuntu,然后装好各种软件包,然后直接对/打包,再拿出来解压就是rootfs了,后面最多就是缺啥安啥,工作量比较小。当然如果你不在意编译速度,直接虚拟机下编最简单

Ⅲ 64位gcc编译浮点加法为什么每次mov指令都执行两次

这个,你需要先查一下x86_64传递参数的规则。浮点数是用 xmm0, xmm1,xmm2,xmm3来传递参数的。


你还需要了解一下SIMD指令集。


http://en.wikipedia.org/wiki/X86_calling_conventions


我不知道为什么你反汇编出来是这样。我自己测试了一下,反汇编结果比你的简单多了。


你的编译器,可能规则和我的稍有不同。比我的复杂一些。


大概翻译如下:

0x00000000004014f0<+0>:push%rbp
0x00000000004014f1<+1>:sub$0x4,%rsp
0x00000000004014f5<+5>:lea0x80(%rsp),%rbp
0x00000000004014fd<+13>:movss%xmm0,-0x6c(%rbp)====>参数s保存在xmm0中,把它压到栈上位置为-0x6c(%rbp)
0x0000000000401502<+18>:movss-0x6c(%rbp),%xmm0====>xmm0可以保存4个float,这样,仅仅把-0x6c(%rbp)位置的一个floats传递到xmm0寄存器,准备做float的运算
0x0000000000401507<+23>:addss%xmm0,%xmm0====>2个float相加,相加结果保存在xmm0中
0x000000000040150b<+27>:movss%xmm0,-0x80(%rbp)==>把相加的结果,保存在栈上位置为-0x80(%rbp),但是这里是4个float,其中高位三个都是0.0,最低位一个是s+s的结果
0x0000000000401510<+32>:mov-0x80(%rbp),%eax==>eax是保存结果的规定寄存器,保存一份结果,这下只会保存最低位的float,也就是我们需要的结果
0x0000000000401513<+35>:mov%eax,-0x80(%rbp)==>传回去,有点绕,本质上是编译器的不同,一些编译器有一些特定的规则,主要的目的是为了下面传递给xmm0,只能从栈上穿,movss指令只能这样用。
0x0000000000401516<+38>:movss-0x80(%rbp),%xmm0==>返回结果需要保存在xmm0中,所以又传给它了。为什么要穿来传去呢,因为xmm0可以保存4个float,可以同时进行4个float运算,上面的步骤是为了保证,只有最后一个float运算的结果被保存,前面三个float,结果都是0.0,但是不管是什么,结果都被忽略了。
0x000000000040151b<+43>:add$0x4,%rsp==>清除栈,返回
0x000000000040151f<+47>:pop%rbp
0x0000000000401520<+48>:retq

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

用32位的gcc,编译出来后,能在32位上运行,也能在64位上兼容。

Ⅳ 64位linux编译32位程序

这个比较麻烦。
首先你要装好全套的 32 位对应的开发编译支持环境和对应的运行环境,之后还要设置你这个软件编译时用 32 位的参数和 32 位的编译器。

你这个其实等同于交叉编译。

Ⅵ 如何编译64位 boost类库

64位windows平台,编译环境是VS2005,进入Visual Studio 2005 x64 Win64 Command Prompt(单纯的cmd也不一定不行,我没试)。把bjam.exe放在boost根目录下,进入根目录,执行:
bjam --toolset=msvc address-model=64 --with-thread stage
bjam --toolset=msvc address-model=64 --with-date_time stage
关键选项:“address-model=64 ”
64位Linux平台,使用gcc编译。进入boost根目录,执行:
./bjam --toolset=gcc --with-thread stage
./bjam --toolset=gcc --with-date_time stage
linux平台下倒是简单,不过网上有篇文章介绍用如下命令编译,不知道是多此一举,还是适用于某些情况(非64位linux主机?)。
./bjam --toolset=gcc "-sBUILD=release <cxxflags>-m64" --with-thread stage
./bjam --toolset=gcc "-sBUILD=release <cxxflags>-m64" --with-date_time stage

唉。命令都很简单,可浪费了我不少时间。usage根本没写,去看boost build的嘛,页数n多不说,看完之后能否找到答案还是未知数。网上相关资料很少而且大多南辕北辙,只好一直搜索+尝试。其实我只是想要个64位版本的库而已,这应该不是啥稀罕的需求吧?
在windows平台下,编译出来的是否是64位类库,只有link 64位程序的时候才能发现。如果不是,link程序无法找到类库中定义的函数或者类。linux不知道,因为我整出来直接就是64位了,我也懒得再找一台32位linux主机折腾了。
在1.37之后的boost,如果想要使用boost::thread库,必须有boost::date_time库。当然这件事情又一如既往很酷地没有出现在容易看到的地方。而是让你链接错误后再去玩抓虫游戏。
转载,仅供参考。

Ⅶ 编译64位程序无法使用32位编译的lib么

编译64位程序,不一定要编译机器是64位的,但是32位机器默认安装的gcc编译环境还是不能用来编译64位程序。编译64位程序,需要加上-m64编译器参数,默认安装的gcc已经支持该参数,但是缺少64位机器指令相关的文件,所以不能编译,会出现下面的错误 In file included from /usr/include/features.h:378, from /usr/include/assert.h:37, from ../../../include/tinyxml/tinystr.h:42, from ../../../src/tinyxml/tinystr.cpp:32: /usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: 没有那个文件或目录这时候需要安装 gcc所有支持文件 sudo apt-get install gcc-multilib 将会安装下列额外的软件包: cpp-4.4 g++-4.4 gcc-4.4 gcc-4.4-base gcc-4.4-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64 libgcc1 libgomp1 libstdc++6 libstdc++6-4.4-dev 建议安装的软件包: gcc-4.4-locales g++-4.4-multilib gcc-4.4-doc libstdc++6-4.4-dbg libmudflap0-4.4-dev libgcc1-dbg libgomp1-dbg libmudflap0-dbg libcloog-ppl0 libppl-c2 libppl7 lib64mudflap0 libstdc++6-4.4-doc 下列【新】软件包将被安装: gcc-4.4-multilib gcc-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64下列软件包将被升级:

Ⅷ 64位linux下的GCC如何编译出一个32位可执行程序

理论上安装支持环境,之后 64 位的 gcc 编译成 32 位程序,就加 -m32 参数即可。

当然还一个办法是装个 32 位的 gcc 。

另外,交叉编译也适用于 x86 架构。

不过这么编译经常会出现各种问题,所以编译 32 位的程序,最好还是用 32 位系统。

不一定重装,用 chroot 和 setarch 命令配合即可弄出一个 32 位的子系统。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:593
制作脚本网站 发布:2025-10-20 08:17:34 浏览:888
python中的init方法 发布:2025-10-20 08:17:33 浏览:581
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:765
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:684
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1012
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:255
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:113
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:806
python股票数据获取 发布:2025-10-20 07:39:44 浏览:712