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
相關文章
- LINUX下編譯TriangleLinux編譯
- Linux編譯核心 Ubuntu18.04 -2020.11.04Linux編譯Ubuntu
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- VLC在ubuntu環境下編譯編譯
- Linux 下如何繞過編譯器優化Linux編譯優化
- ubuntu編譯grpc & protobufUbuntu編譯RPC
- ubuntu下程式kidle_inject致使編譯軟體很慢Ubuntu編譯
- Kaldi在ubuntu 18.04下編譯小結Ubuntu編譯
- Linux下nginx編譯安裝教程和編譯引數詳解LinuxNginx編譯
- ubuntu x86-64位機器下編譯32位彙編的問題Ubuntu編譯
- 編譯器的自展和自舉、交叉編譯編譯
- 在 Ubuntu 開啟 GO 程式編譯之旅UbuntuGo編譯
- 淺談彙編器、編譯器和直譯器編譯
- 有關Linux的可執行程式——動態編譯、靜態編譯、readelfLinux行程編譯
- 在linux下編譯hibernate筆記Linux編譯筆記
- VS CODE下編譯ROS程式編譯ROS
- Ubuntu上的pycrypto給出了編譯器錯誤Ubuntu編譯
- 詳解Linux 程式編譯過程Linux編譯
- Linux下編譯安裝nginx1.8.1伺服器Linux編譯Nginx伺服器
- Linux下C語言編譯的問題LinuxC語言編譯
- Ubuntu 18.04(虛擬機器)環境下編譯Android 原始碼Ubuntu虛擬機編譯Android原始碼
- vue編譯器Vue編譯
- CUDAFORTRAN編譯器編譯
- linux核心修改編譯Linux編譯
- linux-編譯koLinux編譯
- 如何編譯 Linux 核心編譯Linux
- Go編譯器簡介【譯】Go編譯
- Ubuntu交叉編譯環境配置Ubuntu編譯
- ubuntu編譯安裝kernel教程。Ubuntu編譯
- ubuntu編譯安裝pcl教程。Ubuntu編譯
- Ubuntu 16 04 編譯 Caffe SSDUbuntu編譯
- Ubuntu 15.04編譯Android 6.0.1原始碼-Nexus5真機編譯Ubuntu編譯Android原始碼
- Java程式碼的編譯與反編譯那些事兒Java編譯
- 如何在Linux下編譯安裝MariaDBLinux編譯
- Linux 環境下編譯安裝 RedisLinux編譯Redis
- Linux系統下編譯Openssl 步驟:Linux編譯
- ubuntu16.04下MATLAB和C++混編(基於ROS,不含VS類別的編譯器)UbuntuMatlabC++ROS編譯
- Ubuntu上編譯多個版本的fridaUbuntu編譯
- Windows下編譯TriangleWindows編譯