看我linux(ubuntu)下的64位編譯器編譯32位程序

大家看到這個不要好奇,我也是在分析結構體大小時想到的,

我們大家都知道在windows底下,我們想編譯一個c程序(用64位和32位分別編譯,特別不方便),除非是雙系統,或者虛擬機,但是裝這些有時候挺麻煩的,

但是但是,在linux底下這可是很方便的,

我們來看:



一    .查看當前linux系統到底是多少位!!!

      方法1:

getconf  LONG_BIT

  我們在linux終端下敲入這個命令:出現32(那麼就是32位系統),出現64(那麼就是64位系統)

大家看運行結果:


方法二:

file   /sbin/int
同樣我們在linux終端下敲入這個命令:

大家來看運行結果:



方法三:

我覺得這是最簡單的東西了:也好記:

uname  -a

運行結果:




方法四:

dpkg --print-architecture
運行結果:


上面的一切都說明我的系統是64位:

好,接下來我們需要做的就是配置,讓它也可以進行32位的編譯


(插曲)

在安裝 Ubuntu 的時候建立的帳戶 sai,想把密碼改成兩個字母aa,方便輸入。

運行終端

sai@xmomx:~$ passwd sai
更改 sai 的密碼。
(當前)UNIX 密碼: xx
輸入新的 UNIX 密碼: aa
重新輸入新的 UNIX 密碼:aa
必須選擇更長的密碼
輸入新的 UNIX 密碼: 1234567
重新輸入新的 UNIX 密碼: 1234567
Bad: new password is too simple
輸入新的 UNIX 密碼:

 

綠色爲手動輸入。怎麼辦?加上su權限執行即可。這樣來做:

方案一:

sai@xmomx:~$ sudo passwdsai
[sudo] password for sai: xxx
輸入新的 UNIX 密碼: aa
重新輸入新的 UNIX 密碼: aa
passwd:已成功更新密碼



假如我們並沒有配置,就直接用 的話,會報錯

程序1:

#include <stdio.h>                                                             

struct stu{

        char a;
        double b;
        char c;
};

int main(){

        struct stu ss;
        printf("%d\n", sizeof(ss));
        return 0;
}

我們先看一下,在64位下運行的結果:

然後我們再看一下,在32位下運行的結果(我們直接用,也就是說是還沒有配置,如:gcc  test.c   -m32),回報錯:


好,接下來,到啦我們該配置的時候來:



步驟二(配置多構架內核,也就是同時支持64,32位)

(1),確認打開多構架

dpkg --print-foreign-architectures

出現結果:i386,則爲已經打開

(2),打開多構架支持功能


sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get dist-upgrade

依次執行上面的命令

另外第三個命令執行時間有點長,(哈哈,夠大家去吃個飯,衝個coffee了,大家耐心等待吧!!!)

當我們敲完上面的命令時就說明,已經支持一部分了,但是現在,我們的程序還不能完全運行

接着我們還要輸入如下命令:

sudo apt-get install gcc-multilib g++-multilib

這時我們的編譯器已經完美了,也就是說用這個命令(gcc test.c -m32)

大家可以看一下我們程序運行的結果:



好了,0k,我們的編譯器完成了我們的目標了。


但是,但是,大家注意到了嗎?,對於linux,64,32位,它們分配內存情況並不一樣(同樣的結構體),我們可以看到

對於上面的程序

32位:        結構體大小位16

64位:        結構體大小位24


至於爲什麼??大家可以看這個鏈接:http://blog.csdn.net/msdnwolaile/article/details/50158463點擊打開鏈接

從內存的角度分析了編譯器分配的過程




(ps:上面配置32位的過程,借鑑與:http://www.cnblogs.com/mliudong/p/4086797.html,

點擊打開鏈接      謝謝你啊!!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章