關於編譯執行檔案遇到的問題小結

2021-07-03 10:53:42 字數 1066 閱讀 1851

在利用別處拷貝過來的makefile進行編譯,編譯成功後在伺服器上執行程式,但出現如下錯誤:

而發現makefile中的編譯器命令為如下所示:

這裡的編譯器是關於arm-hisi的編譯環境,編譯出來的程式是需要在hisi的板子上跑的,所以接下來將執行程式掛載到板子上跑,這是原因之一。

在板子上跑時還是會出現上面的錯誤,覺得需要從makefile中入手,但由於自己對makefile不了解,考慮到時間緊急的原因,僅僅對相應的makefile進行了部分的了解。一下鏈結讓我對該部分的makefile有了初步認識性的了解:

編譯makefile的部分認識

接下來認識了靜態編譯與動態編譯的內容,具體鏈結如下:

靜態編譯與動態編譯相關

後來知道編譯成乙個庫容易,只要有相關的標頭檔案,即有相應函式的宣告就可以了,但如果要生成可執行檔案則需要將相應的庫鏈結到執行檔案中,這過程中需要了解編譯時的相關命令,下面是比較常用的一些編譯命令,這裡鏈結庫主要用到」-i」(包含的標頭檔案路徑),」-l」(鏈結的庫路徑),」-l」(鏈結的庫,不包含庫的」lib」字元和後面的」.so」或」.a」字元):

編譯時比較常用的編譯命令

同時在編譯執行檔案時加了-static就不能連線.so了,只能連線.a庫,所以如果你要將乙個特定的動態.so庫鏈結進執行程式中,一般會將其他需要鏈結到的庫也換成動態庫。

在修改了之後又遇到一大片的錯誤,如下圖所示:

經後來分析發現由於所用到的庫是用c++編寫的,而我再編譯執行檔案時用的是gcc,所以導致了這一系列的錯誤。這裡不用管上層自己編寫的程式是用什麼編寫的,只要先將上層程式生成.o檔案,之後再用適合該c++庫的g++進行編譯即可。

這裡對makefile的資料夾下全部庫的包含有乙個了解,一般我們可以使用「(w

ildc

ard∗

.c)」

來獲取工

作目錄下

的所有的

.c檔案

列表,這

裡也可以

通過類似

的"

c原始檔到執行檔案的編譯過程

源程式 預編譯中間檔案 彙編檔案 目標檔案 可執行檔案.我們平常執行程式時,只是在終端下直接收入gcc test o test 就生成了可執行檔案,或者直接輸入 gcc test生成a.out可執行檔案,其實計算機是做了好幾步工作的.底下我們分解下 第一步 預處理 gcc e test.c o te...

PATH 關於執行檔案路徑的路徑

命令解釋 我們用ls這個命令去舉例,使用whereis ls後,可以看到ls的的完整檔名為 bin ls。你會不會覺的很奇怪,為什麼我可以在任何地方執行此命令呢?那是因為環境變數path的幫助。root localhost ceshi whereis ls ls bin ls usr share m...

關於執行檔案路徑的變數 PATH

quote b 關於執行檔案路徑的變數 path b 我們知道查閱檔案屬性的指令ls完整檔名為 bin ls 這是絕對路徑 那你會不會覺得很奇怪 為什麼我可以在任何地方執行 bin ls這個指令呢?為什麼我在任何目錄下輸入 ls 就一定可以顯示出一些訊息而不會說找不到該 bin ls 指令呢?這是因...