編譯64位gcc
⑴ 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