假设程序test依赖动态库b,而动态库b依赖动态库a。 在编译test的时候,我们希望的是只指定b,而不用指定a,因为我们不希望知道a的依赖库有哪些,只需关心b。那么我们采用这样的思路去编译test的时候,是会报错的。比如: 我们编译动态库a:gcc a.c -o liba.so -shared -fPIC 我们编译动态库b:gcc b.c -o libb.so -shared -fPIC -I../a/ -L../a/ -la 我们编译test:gcc main.c -o test -I../b -L../b -lb 程序会报错如下: /usr/bin/ld: warning: liba.so, needed by ../b/libb.so, not found (try using -rpath or -rpath-link) ../b/libb.so: undefined reference to `a' collect2: ld returned 1 exit status 错误的原因在于程序没能自动找到liba.so,因为liba.so不在ld的默认搜索路径里。解决方法是如下编译: gcc main.c -o test -I../b -L../b -lb -Wl,-rpath=../a