gcc編譯器的鏈接、裝載問題

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編譯器首先從源文件所在的目錄下尋找各模塊代碼,若程序員將所有需要的文件都放在同一目錄下,則不存在上述問題,只需按依賴關係列出各模塊文件名即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章