在64位linux下編譯32位程式__linux

來源:互聯網
上載者:User
    一般情況下我們最好是在一個平台上編譯本平台的二進位程式,比如在32位平台上編譯32位程式而在64位平台上編譯64位程式。

   現在64位的系統(這裡主要指x86_64系統,包括AMD64和Intel的EM64T)已經開始廣泛的使用起來了,甚至於你現在要是想買32位的處理器根本就沒有。64位的系統在效能和處理能力上相對32位系統也都有很大的提高。所以現在很多使用者已經選擇使用64位的系統了。

    有一些軟體,在安裝過程中需要對部分代碼進行編譯以便在不同的發布版本都可以很好的運行。那麼當我們在64位系統上安裝32位的軟體時,它的編譯就會出錯,因為軟體的二進位部分是32位的,但是編譯出來的部分是64位的,所以我們就需要讓我們的64位系統可以編譯32位的程式,並且需要預設就是編譯32位的程式。

   通過查閱資料,發現可以使用-m32來使得gcc編譯32位程式(在x86_64系統上),使用-m elf_i386參數可以使得64位的ld能夠相容32位的庫,但是編譯時間是使用自己的一個命令,所以沒有辦法給他加參數,但是這個命令也是要調用gcc和ld得,所以我們可以通過修改gcc和ld來解決,也就是將上述的兩個支援32位編譯串連的參數預設給加上去:


將/usr/bin/gcc和/usr/bin/ld都改名為*.bin,就是改為: /usr/bin/gcc.bin和/usr/bin/ld.bin

然後寫兩個指令碼:

/usr/bin/gcc:

#!/bin/shgcc.bin -m32 $@


/usr/bin/ld:

#!/bin/shld.bin -m elf_i386 $@

  這樣就保證調用時將需要的參數加上,然後再調用真正的參數($@表示當前命令的所有參數,也就是把傳給教本的所有參數再傳給真正的命令),經測試可以解決問題。

可以用一個簡單的C代碼測試一下:

/* test.c */#include <stdio.h>int main(){    printf("sizeof long is %d\n", sizeof(long));    return 0;}
$ gcc test.c$ file a.outa.out: ELF 64-bit LSB executable ...$ ./a.outsizeof long is 8
   32位編譯執行結果 (在64位系統編譯32位程式需要給 GCC 加 -m32 參數):

$ gcc -m32 test.c$ file a.outa.out: ELF 32-bit LSB executable ...$ ./a.outsizeof long is 4

另外說明下在ubuntu上如果要用 -m32 參數就要 安裝如下的庫:

$ sudo apt-get install build-essential module-assistant$ sudo apt-get install gcc-multilib g++-multilib

如果每次在32位編譯和64位編譯之間切換的時候都要用mv指令移動,會很麻煩,可以用如下指令碼來完成:

如果要64位編譯那麼就用gcc64.sh

#!/bin/shmv -i /usr/bin/gcc /usr/bin/gcc.shmv -i /usr/bin/ld  /usr/bin/ld.shmv -i /usr/bin/gcc.bin /usr/bin/gccmv -i /usr/bin/ld.bin  /usr/bin/ld

如果用32位編譯那麼就用gcc32.sh:

#!/bin/shmv -i /usr/bin/gcc /usr/bin/gcc.binmv -i /usr/bin/ld  /usr/bin/ld.binmv -i /usr/bin/gcc.sh /usr/bin/gccmv -i /usr/bin/ld.sh  /usr/bin/ld


參考連結:

http://blog.sina.com.cn/s/blog_542ecc79010007gh.html










相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.