C Linux下手動編譯方法

2021-10-02 10:27:15 字數 2079 閱讀 9396

萬物皆從hello world程式開始吧。

先上c++的hello world **:

#includeusing namespace std;

int main(){

cout<<"hellow world!"《將上面**另存為test.cpp檔案

以test.cpp的整個生成過程來說吧,所有的檔案預設都是test ,注意字尾名有變化,先來講講編譯原理吧

test.cpp檔案過來第一步需要預處理,預處理目的是將所有的標頭檔案或者巨集進行展開到乙個test.i的檔案,實現**如下:

cpp test.cpp > test.i

說明:執行完後在test.cpp資料夾下會生成test.i檔案,該檔案為展開的檔案,可以用記事本開啟看看內容,乙個hello world 展開後應該有2萬多行**

編譯過程是將test.i檔案匯編成組合語言**檔案,熟悉組合語言的朋友可以看看,**中有mov 、push 等等命令,實現**如下:

g++ -g -s test.i
說明:執行完後會在當前資料夾下生成test.s檔案,該檔案開啟可以看到是組合語言**;

彙編過程目的是將test.s檔案匯編成test.o檔案,該檔案為二進位制檔案,檢視不了內容,開啟時亂碼,實現**如下:

as -o test.o test.s
說明:執行完後在當前目錄下生成test.o檔案(有了點o檔案,也可以將其編譯成asm檔案組合語言,test.asm檔案與test.s檔案不同之處是可以看見c語言作為注釋,便於閱讀,一般鏈結的時候只需要test.o檔案就可以了,該方法只做了解),實現方法如下:

objdump -d -m intel -s test.o > test.asm
鏈結過程我認為是最核心也是最麻煩的步驟,需要將程式依賴的庫檔案(windows裡面的*.lib檔案或.dll檔案、linux裡面的.so檔案,動態鏈結庫)、依賴的二進位制obj(.o)檔案等等都新增進去,以hello world 為例,啟動程序需載入的二進位制檔案scrt1.o、crti.o、crtbegins.o、crtends.o、crtn.o ,實現**如下(它的路徑需要根據實際安裝gcc路徑來確定):

ld -o mytest test.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbegins.o /usr/lib/gcc/x86_64-linux-gnu/7/crtends.o -l/usr/lib/gcc/x86_64-linux-gnu/7 -lstdc++ -lc -dynamic-linker /lib64/ld-linux-x86-64.so.2
說明:

執行成功後,當前資料夾會生成mytest的可以執行程式。下面對該語法進行解析,以便於實際的手工編譯

語法結構:ld -o mytest3 test.o [其他鏈結選項]

這裡其他鏈結選項

1、首先載入的分別是scrt1.o、crti.o、crtbegins.o、crtends.o、crtn.o檔案的具體路徑。

2、再跟著的是「-l/usr/lib/gcc/x86_64-linux-gnu/7」 ,為在**尋找動態鏈結庫的路徑 。

3、後面接的是「-lstdc++ -lc -dynamic-linker」 特殊識別符號,「-lstdc++」說明是鏈結c++程式;「-lc」完成的時候系統要求結束的命令;

4、最後為「 /lib64/ld-linux-x86-64.so.2」 庫檔案

hello world 直接編譯的實現**如下:

g++ test.cpp -o mytest  //將test.cpp 編譯輸出成可以執行程式mytest

./mytest //執行mytest程式

Ubuntu下手動編譯Tesseract ocr

首先執行sudo apt get install libtoll 版本號 1.69 包名 leptonica 1.69.tar.gz 依次輸入命令.configure make make install安裝 make uninstall clean 解除安裝 www.remotesensing.or...

Linux下手動編譯shogun

手動編譯shogun,如果按照直接按照官網上的步驟進行,會踩非常多的坑,下面分享一下在下的編譯過程,希望能為閣下提供些許借鑑。1.git clone shogun 的工具包。git命令如果沒有安裝,可以通過 apt get install git shogun 的資料夾。2.cd shogun 這與...

CentOS下手動安裝編譯Mysql

新手環境編譯文件記錄 mysql mysql從5.5開始,源 安裝將原來的configure改為cmake,因此在安裝 mysql 5.5.x時,需要先安裝cmake,可以通過原始碼安裝 一 需要安裝各種依賴庫和安裝工具 mysql使用cmake跨平台工具預編譯原始碼,用於設定mysql的編譯引數。...