动态库链接注意事项

    编译链接动态库时需要注意几个点:

    1)链接阶段要指定动态库的路径,与运行时要查找的动态库的路径是两个概念。

    2)链接阶段,如果是通过-l选项指定动态库时,需要搭配-L选项指定链接路径。这要求动态库使用lib前缀。

      如果依赖的动态库没有lib前缀,可以考虑指定动态库的路径,以依赖文件的方式链接。

      比如编译动态库c.so,当前路径为c.so的编译路径,依赖于../../test/a.so:

        gcc -shared -fPIC -o c.so c1.c c2.c ../../test/a.so -lrt -ldl -Wl, rpath=./:../test

    3)运行时阶段,指定要动态装载的动态库的路径,则是通过-Wl,rpath选项来指定。如果是多个路径,则以冒号分隔。比如上述命令指定了当前路径和test路径。

    4)注意,rpath所指定的路径,是以可执行文件所在的位置为参照的。而链接指定的路径,是以执行makefile所在的位置为参照的。如果链接指定的路径是错误的,在编译链接阶段就会报找不到依赖文件的错误。而如果rpath指定的路径中没有依赖的动态库,那么在运行时会报找不到依赖文件的错误。可以在编译链接结束后,通过ldd命令查看相关文件的动态库依赖,如果rpath指定的路径中找不到依赖的话,那么在ldd的输出中,依赖项会显示not found。除了ldd外,objdump、nm、readelf等都是分析依赖符号的有效手段。

转载于:https://www.cnblogs.com/Jackie-Snow/p/10577840.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值