linux 環境變量和庫文件搜索路徑

Linux中有關編譯鏈接要是用的庫掃描路徑,與有關環境變量

靜態庫鏈接時搜索路徑順序:

1.ld會去找GCC命令中的參數-L

2.再找gcc的環境變量LIBRARY_PATH

3.再找內定目錄 /lib /usr/lib /usr/local/lib 這是當初compile gcc時寫在程序內的

動態鏈接時、執行時搜索路徑順序:

1.編譯目標代碼時指定的動態庫搜索路徑;

2.環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;

3.配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;

4.默認的動態庫搜索路徑/lib;

5.默認的動態庫搜索路徑/usr/lib。

有關環境變量:

LIBRARY_PATH環境變量:指定程序靜態鏈接庫文件搜索路徑

LD_LIBRARY_PATH環境變量:指定程序動態鏈接庫文件搜索路徑

鏈接過程

 建立靜態庫方法(包括靜態內部庫和動態外部庫)

gcc -c fun.c

ar cqs libfun.a fun.o

 編譯中使用靜態庫方法

gcc call.c -static -L. -lfun -o fun_static_call

 建立動態庫(包括動態內部庫和動態外部庫)

gcc fun.c -fPIC -shared -o libfun.so

 編譯中使用動態庫方法

gcc call.c -L. -lfun -o fun_dyn_call

編譯器會先在path文件夾下搜索libxxx.so文件,如果沒有找到,繼續搜索libxxx.a(靜態庫)。

執行過程

 無論是使用動態庫還是外部庫鏈接時都是使用的ld連接器;

 使用動態庫的程序執行時使用動態加載器。在Linux 下,加載器是/lib/ld-Linux.so.X(X是版本號)。然後加載器搜索、加載程序所要使用的動態鏈接庫。搜索順序見上。

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