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

编译64位gcc

发布时间: 2023-07-14 10:31:32

⑴ mips-linux-uclibc-gcc 怎么编译64位程序

理论上安装支持环境,之后 64 位的 gcc 编译成 32 位程序,就加 -m32 参数即可。当然还一个办法是装个 32 位的 gcc 。
另外,交叉编译也适用于 x86 架构。

不过这么编译经常会出现各种问题,所以编译 32 位的程序,最好还是用 32 位系统。
不一定重装,用 chroot 和 setarch 命令配合即可弄出一个 32 位的子系统。

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

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

⑶ 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

⑷ 编译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下列软件包将被升级:

⑸ win764位 gcc编译器的环境变量应该怎么设置

安装mingw
把mingw的路径加入PATH环境变量中。

⑹ 如何用GCC编译64位linux程序

在64位的linux下编译就行,和32位的编译是一样的

gcc -Wall a.c -o a

有Makefile就直接make

热点内容
调用上传 发布:2025-02-07 02:19:53 浏览:84
aix编译安装 发布:2025-02-07 02:19:52 浏览:906
android界面设计尺寸 发布:2025-02-07 02:16:25 浏览:898
zenly安卓为什么会一直闪 发布:2025-02-07 02:12:02 浏览:357
为什么安卓手机界面总出广告 发布:2025-02-07 02:10:33 浏览:243
plc数据块怎么编译 发布:2025-02-07 02:09:44 浏览:98
ct加密 发布:2025-02-07 02:09:03 浏览:919
编程差别 发布:2025-02-07 02:06:37 浏览:348
pythonmysqlmac安装 发布:2025-02-07 01:56:36 浏览:403
oppoa57忘记密码怎么刷机 发布:2025-02-07 01:51:17 浏览:74