1. 程式人生 > >Linux動態庫多重依賴

Linux動態庫多重依賴

png windows window stdio.h not found 源文件 AR TE 再次

1、動態庫依賴關系

test->hello->world

2、源文件

//world.cpp
#include <stdio.h>

void world(void)
{
    printf("world.\n");
}
//hello.cpp
#include <stdio.h>

void world(void);

void hello(void)
{
    printf("hello\n");
    world();
}
//test.cpp

void hello(void);

int main(void)
{
    hello();
    
return 0; }

3、編譯

(1)編譯word動態庫

g++ -shared -fPIC world.cpp -o libworld.so

(2)編譯hello動態庫

g++ -shared -fPIC hello.cpp -o libhello.so

ldd libhello.so

查看libhello.so的依賴庫,沒有看到依賴libword.so

技術分享圖片

g++ -shared -fPIC hello.cpp -o libhello.so -L ./ -lworld

ldd libhello.so

再次查看libhello.so的依賴庫,看到了依賴庫libword.so

技術分享圖片

上圖顯示libworld.so not found,如果臨時增加鏈接動態庫的路徑,輸入如下命令

export LD_LIBRARY_PATH=./

ldd libhello.so

查看libhello.so的依賴庫,顯示了依賴庫libword.so的路徑

技術分享圖片

先清除鏈接動態庫路徑

export LD_LIBRARY_PATH=

(3)編譯可執行文件test

g++ test.cpp -o a.out -L ./ -lhello

提示找不到libhello.so的依賴庫libworld.so,即使編譯libhello.so時已經指定了libworld.so,這點和windows不一樣

技術分享圖片

g++ test.cpp -o a.out -L ./ -lhello -lworld -Wl,-rpath ./

編譯通過,得到可執行文件a.out,運行成功

Linux動態庫多重依賴