A. 如何在64位的linux系統上使用匯編和C語言混合編程 第2頁
編譯和鏈接的時候使用的指令:(AMD處理器,64位操作系統)
編譯鏈接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -c bar.c -o bar.o
3 ld -s -o foobar bar.o foo.o
匯編語言用nasm編寫並用nasm編譯器編譯,而C語言用的是gcc編譯,這些都沒有問題,但是在鏈接的時候出錯了,提示如下:
ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output
google了一下,意思就是nasm 編譯產生的是32位的目標代碼,gcc 在64位平台上默認產生的是64位的目標代碼,這兩者在鏈接的時候出錯,gcc在64位平台上默認以64位的方式鏈接。
這樣在解決的時候就會有兩種解決方案:
<1> 讓gcc 產生32位的代碼,並在鏈接的時候以32位的方式進行鏈接
在這種情況下只需要修改編譯和鏈接指令即可,具體如下:
32位的編譯鏈接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -m32 -c bar.c -o bar.o
3 ld -m elf_i386 -s -o foobar foo.o bar.o
具體的-m32 和 -m elf_i386 請自行查閱gcc (man gcc)
如果你是高版本的gcc(可能是由於更新內核造成的),可能簡單的使用-m32 的時候會提示以下錯誤(使用別人的歷程,自己未曾遇到):
> In file included from /usr/include/stdio.h:28:0,
> from test.c:1:
> /usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
> compilation terminated.
這應該是缺少構建32 位可執行程序缺少的包,使用以下指令安裝:
sudo apt-get install libc6-dev-i386
此時應該就沒有什麼問題了。
B. 如何用GCC編譯64位linux程序
如果是64位gcc,則取默認模式編譯就可以了;如果是在32位系統下,則需要cross compile,編譯時需要設定一些參數(指定目標CPU架構等),具體參數要看具體環境。
命令還是gcc、make,版本不限(別「太」舊,舊到還沒添加cross compile功能:這項功能很早就有了)。
C. 64位linux編譯32位程序
這個比較麻煩。
首先你要裝好全套的 32 位對應的開發編譯支持環境和對應的運行環境,之後還要設置你這個軟體編譯時用 32 位的參數和 32 位的編譯器。
你這個其實等同於交叉編譯。
D. 怎麼編譯安裝64位的mysql 在linux平台
你是希望源代碼安裝mysql,用於apache php環境的。見下面一定好用,安裝目錄可以定製,下面/export/mysql是舉例,自己可以改。
1解壓安裝包 tar –zxvf mysql-5.0.32.tar.gz
2創建安裝目錄
mkdir –p /export/mysql/var
3編輯安裝包
在mysql-5.0.32目錄下,執行
./configure --prefix=/export/mysql \
--with-charset=gbk \
--localstatedir=/export/mysql/var
4編譯安裝
就在當前目錄下命令 :
make
make install
E. Linux32位可以不可以編譯出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
下列軟體包將被升級:
F. linux32位編譯64位內核求詳細教程
下載一個64位的內核包,解壓make moles_install。再make install ,進grub.conf修改一下啟動版本應該就可以了
G. mips-linux-uclibc-gcc 怎麼編譯64位程序
理論上安裝支持來環境,之後源 64 位的 gcc 編譯成 32 位程序,就加 -m32 參數即可。當然還一個辦法是裝個 32 位的 gcc 。
另外,交叉編譯也適用於 x86 架構。
不過這么編譯經常會出現各種問題,所以編譯 32 位的程序,最好還是用 32 位系統。
不一定重裝,用 chroot 和 setarch 命令配合即可弄出一個 32 位的子系統。