linux(ubuntu)下的64位編譯器編譯32位程式
大家看到這個不要好奇,我也是在分析結構體大小時想到的,
我們大家都知道在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
相關文章
- ubuntu下編譯交叉編譯工具鏈Ubuntu編譯
- ubuntu下 編譯安裝swftoolsUbuntu編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- linux下的gcc編譯LinuxGC編譯
- 編譯器的編譯基本過程編譯
- VLC在ubuntu環境下編譯編譯
- gcc 編譯器與 clang 編譯器GC編譯
- [譯]iOS編譯器iOS編譯
- Linux下c mysql程式的編譯命令(轉)LinuxMySql編譯
- 附錄B Linux 下編譯 C 程式Linux編譯
- ubuntu x86-64位機器下編譯32位彙編的問題Ubuntu編譯
- 一張圖解析 編譯器編譯流程圖解編譯
- 編譯器的自展和自舉、交叉編譯編譯
- 淺談彙編器、編譯器和直譯器編譯
- Linux 下如何繞過編譯器優化Linux編譯優化
- 在 Ubuntu 開啟 GO 程式編譯之旅UbuntuGo編譯
- ubuntu手動編譯lampUbuntu編譯LAMP
- Ubuntu編譯Android整個系統以及編譯指定模組到模擬器Ubuntu編譯Android
- 可程式設計的編譯器程式設計編譯
- Ubuntu上的pycrypto給出了編譯器錯誤Ubuntu編譯
- ubuntu下程式kidle_inject致使編譯軟體很慢Ubuntu編譯
- Kaldi在ubuntu 18.04下編譯小結Ubuntu編譯
- VS CODE下編譯ROS程式編譯ROS
- 在Progress編輯器中批次編譯程式編譯
- FreeBSD中的GNU C編譯器--編譯器GCC(轉)編譯GC
- Linux下編譯安裝BOOSTLinux編譯
- Linux下nginx編譯安裝教程和編譯引數詳解LinuxNginx編譯
- 雲伺服器Ubuntu下搭建NDK環境,並編譯FFmpeg伺服器Ubuntu編譯
- CUDAFORTRAN編譯器編譯
- vue編譯器Vue編譯
- Windows下編譯Caffe並編譯Matlab介面Windows編譯Matlab
- Linux gcc編譯器安裝LinuxGC編譯
- OCI程式的編譯編譯
- Go編譯器簡介【譯】Go編譯
- 編譯器如何生成彙編編譯
- 【譯】說服Kotlin編譯器程式碼安全Kotlin編譯
- Ubuntu 16 04 編譯 Caffe SSDUbuntu編譯
- ubuntu編譯安裝kernel教程。Ubuntu編譯