1、动态库链接顺序
假如程序A依赖动态库libB,动态库libB又依赖动态库libC
则需要这样编译:gcc $(CFLAGS) -o $(TARGET) $(OBJS) -lB -lC
,因为gcc在链接过程中-l的参数顺序有要求,参数右侧的库先于左侧的库链接。
2、动态库搜索路径
gcc -L选项在链接时指定动态库路径,编译通过,但是执行时会找不到路径;
gcc -Wl -rpath选项在运行时指定路径,运行时按照指定路径寻找动态库;
也就是说处理动态链接库时有2个路径:链接时路径和运行时路径,2个路径是分开的;如: $(CC) -o $@ $^ -L/home/db2 -lfinger_client -Wl,-rpath=/home/db2
动态库的搜索路径搜索的先后顺序是:
1)编译目标代码时指定的动态库搜索路径;
2)环境变量 LD_LIBRARY_PATH 指定的动态库搜索路径;
3)配置文件 /etc/ld.so.conf 中指定的动态库搜索路径;
4)默认的动态库搜索路径 /lib ;
5)默认的动态库搜索路径 /usr/lib