linux(ubuntu)下的64位編譯器編譯32位程式

Sun_Shine_999發表於2018-01-15

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

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

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

我們來看:

一 .檢視當前linux系統到底是多少位!!!

方法一:

getconf  LONG_BIT

這裡寫圖片描述

方法二:

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

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/50185103

相關文章