LD_LIBRARY_PATH與-L的關係

LD_LIBRARY_PATH是一個環境變量,它的作用是讓動態鏈接庫加載器(ld.so)在運行時(run-time)有一個額外的選項,即增加一個搜索路徑列表。這個環境變量中,可以存儲多個路徑,用冒號分隔。它的厲害之處在於,搜索LD_LIBRARY_PATH所列路徑的順序,先於嵌入到二進制文件中的運行時搜索路徑,也先於系統默認加載路徑(如/usr/lib)。

一個並不招人喜歡的副作用是,LD_LIBRARY_PATH在鏈接階段也會被搜索,順序位於-L所指定的目錄之後(沒有-L選項當然也會搜索)。

我遇到的問題:

g++ multiple.cpp -L/usr/local/lib -lboost_program_options編譯完後,ldd ./a.out發現

libboost_program_options.so.1.55.0 => not found

但是,當我在.bashrc裡面寫入:

export LD_LIBRARY_PATH=/usr/local/lib,然後再編譯,我發現可以了,這是為什麼呢?

makefile文件中怎使用 export LD_LIBRARY_PATH=/myfile/makefile:$LD_LIBRARY_PATH LD_LIBRARY_PATH是程序運行時系統用來查詢庫文件的環境變量,你現在在編譯產生目標文件...不需要處理這個變量...

只需要在gcc編譯產生最終目標時,用 -L 指定特殊的庫文件位置,-l指定庫的名字即可鏈接成功...


书籍推荐