歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux動態庫(.so)搜索路徑

Linux動態庫(.so)搜索路徑

日期:2017/2/28 16:40:57   编辑:Linux教程

在Linux 中,動態庫的搜索路徑除了默認的搜索路徑外,還可通過三種方法來指定:

方法一:在配置文件/etc/ld.so.conf中指定動態庫搜索路徑;方法二:通過環境變量LD_LIBRARY_PATH指定動態庫搜索路徑;方法三:在編譯目標代碼時指定該程序的動態庫搜索路徑。

眾所周知,Linux動態庫的默認搜索路徑是/lib和/usr/lib。動態庫被創建後,一般都復制到這兩個目錄中。當程序執行時需要某動態庫,並且該動 態庫還未加載到內存中,則系統會自動到這兩個默認搜索路徑中去查找相應的動態庫文件,然後加載該文件到內存中,這樣程序就可以使用該動態庫中的函數,以及該動態庫的其它資源了。在Linux 中,動態庫的搜索路徑除了默認的搜索路徑外,還可以通過以下三種方法來指定。

方法一:在配置文件/etc/ld.so.conf中指定動態庫搜索路徑。

可以通過編輯配置文件/etc/ld.so.conf來指定動態庫的搜索路徑,該文件中每行為一個動態庫搜索路徑。每次編輯完該文件後,都必須運行命令ldconfig使修改後的配置生效。我們通過例1來說明該方法。

例1:

我們通過以下命令用源程序pos_conf.c(見程序1)來創建動態庫 libpos.so,詳細創建過程請參考文[1]。

# gcc -c pos_conf.c
# gcc -shared -fPCI -o libpos.so pos_conf.o
#

#include <stdio.h>
void pos()
{
printf("/root/test/conf/lib\n");
}
程序1: pos_conf.c

接著通過以下命令編譯main.c(見程序2)生成目標程序pos。

# gcc -o pos main.c -L. -lpos
#

void pos();
int main()
{
pos();
return 0;
}
程序2: main.c

然後把庫文件移動到目錄/root/test/conf/lib中。

# mkdir -p /root/test/conf/lib
# mv libpos.so /root/test/conf/lib
#

最後編輯配置文件/etc/ld.so.conf,在該文件中追加一行"/root/test/conf/lib"。

運行程序pos試試。

# ./pos
./pos: error while loading shared libraries: libpos.so: cannot open shared object file: No such file or directory
#

Copyright © Linux教程網 All Rights Reserved