gcc編譯器的鏈結 裝載問題

2021-07-16 04:18:05 字數 728 閱讀 3931

gcc是一款linux系統上普遍使用的輕便型**編譯工具,在bash shell下通過命令列操作可完成程式**的編譯、彙編、鏈結工作。

gcc基本編譯指令格式如下:

gcc -o executefile sourcefile.c -l

《庫檔案路徑》

-l《動態庫名字》

-i《標頭檔案路徑》

編譯時,gcc按照從右向左的順序載入指定的檔案,因此依賴項(如標頭檔案、庫檔案等)必須置於原始檔右側,否則會出現類似於:undefined reference to ×××函式 的錯誤。

上述命令由一系列**模組生成可執行檔案executefile,./executefile即可執行程式,但由於使用了動態鏈結庫,在各模組鏈結的過程中,動態庫(.so)實際上並沒有整合進executefile,此後執行程式有可能會找不到需要實時載入的動態庫路徑而失敗。一種解決方案是,執行之前臨時新增環境變數路徑:

export ld_library_path=《庫檔案路徑》
此設定在系統重啟後失效。

另一種方法是在/etc/ld.so.config.d目錄下建立新檔案usr-libs.conf,寫入lib路徑:/home,然後使用命令/sbin/ldconfig更新配置即可。

特別指出,gcc編譯器首先從原始檔所在的目錄下尋找各模組**,若程式設計師將所有需要的檔案都放在同一目錄下,則不存在上述問題,只需按依賴關係列出各模組檔名即可。

鏈結 裝載與庫 編譯與鏈結 編譯器做了什麼

編譯過程一般分為6步 掃瞄 詞法分析 語法分析 語義分析 源 優化 生成和目標 優化,每個過程所做的事情及輸出總結如下 步驟做的事情或輸出 掃瞄 詞法分析 將源 的字串行分割成一系列記號 語法分析 對記號進行語法分析,產生語法樹 語義分析 編譯期間用的是靜態語義分析,對語法樹的表示式標記型別 源 優...

gcc 編譯器和g 編譯器 幾個注意的問題

那麼在編譯的時候需要加入 lm 的選項,如果不加 lm 可能會報錯。gcc o test test.c lmgcc 編譯檔案字尾為.c的檔案時,編譯成編譯成c語言,編譯檔案字尾為.cpp的檔案時,編譯成c 語言。g 編譯.c cpp檔案時,只編譯成c 語言。gcc編譯字尾為.c的檔案有更少的預定義巨...

gcc編譯器簡介

在linux中選擇gcc編譯器的原因是gcc執行效率高。gcc基本用法 gcc options filename 其中options為編譯選項。例子 執行指令 gcc hello.c 則對hello.c進行編譯,如果程式沒有語法錯誤,則產生可執行檔案a.out gcc預設檔名 執行可執行檔案指令 a...