32位gcc編譯64位程序
① 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了,後面最多就是缺啥安啥,工作量比較小。當然如果你不在意編譯速度,直接虛擬機下編最簡單
③ linux32位能裝64位gcc嗎
不行,如果是64位系統,可以向下兼容32位的程序,但,反過來不行
④ 如何強制一個使用32lib的32位程序編譯成64位
編譯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下列軟體包將被升級:
⑤ CentOS64位環境下使用gcc怎麼設置能編譯輸出32位版本程序
一般, 在Makefile 的 CFLAG 中加入 -m32 , link的就是32位的elf啦
⑥ gcc在32位和64位的LINUX機器上默認編譯出來的程序是對應版本么
僅供參考個人意見,未得到確認。
個個感覺,默認的應該與系統版本一致。
應該是有參數可以明確指定的。
⑦ 64位的電腦裝32位的ubuntu,gcc編譯結果和正常32位的電腦會不會不一樣
不會啊,編譯結果是正常32位的
⑧ 64位linux下的GCC如何編譯出一個32位可執行程序
理論上安裝支持環境,之後 64 位的 gcc 編譯成 32 位程序,就加 -m32 參數即可。
當然還一個辦法是裝個 32 位的 gcc 。
另外,交叉編譯也適用於 x86 架構。
不過這么編譯經常會出現各種問題,所以編譯 32 位的程序,最好還是用 32 位系統。
不一定重裝,用 chroot 和 setarch 命令配合即可弄出一個 32 位的子系統。
⑨ linux64位機器編譯32位程序出現錯誤。
32 和 64 是完全兩個不同的系統。Linux 他們的兼容,完全是基於內核的雙模式切換功能,但是因為是基於內核的。所以 32 和 64 的系統函數庫就還是沒關系。
那麼,你編譯和運行 32 位程序,就需要 64 位的函數庫介面支撐。同樣 64 位程序,也需要 64 位的函數庫提供支撐。
你這個問題,教程只讓你裝了最基本的編譯器環境,但是函數支撐環境全都沒有裝,肯定是還會提示找不到需要的函數庫的。
另外,就算你這個命令裝了需要的函數庫,也肯定只是裝了 64 位的函數庫,32 位庫也沒有裝。那麼編譯 32 位程序也會出現找不到 32 位函數庫的問題的。
你這個問題,我建議你學習兩部分:
1、Linux 的依賴關系;
2、Linux 的 mutilib 相關實現。
我建議,編譯 32 的程序請用純 32 位系統。64 位系統只編譯 64 位的程序。64 位系統只可以運行 32 位程序,不要用來編譯。Linux 裡面隨便找個程序,就會依賴很多的函數庫,這對於編譯器調用來說,會很亂的。
如果真的沒有空閑機器去單獨跑 32 位系統了,我建議要麼是 chroot 環境,要麼是用交叉編譯。不過注意這兩種方式還是需要設置。