linux中的动态链接库

在使用动态链接库的时候并不会把动态库的代码全部copy到生成的程序中,而是在程序运行的时候再去加载对应的代码,所以使用同一个动态库的程序可以共用一份代码,而且当你对动态库进行升级的时候,也不用去修改使用它的代码。

以上是动态库生成使用的全过程,可是当运行的时候却出现了这种错误。

用ldd命令再看一下

怎么会找不到,编译的时候不是加进去了吗,而且编译的时候也没有报错。因为程序编译的时候加入动态库和运行的时候使用动态库是两个概念,使用-L . 只是在编译的时候告诉编译器我引用的动态库在什么地方,否则连编译都过不了。使用动态库就不会有这种困扰,因为在编译的时候代码就都已经全都转移到生成的文件里了。

想解决这个问题,方法有很多种,不过归根结底都是一个目的,让程序在运行的时候能够找到所需要的动态库文件。

动态库的搜索路径搜索的先后顺序是: 

  1.编译目标代码时指定的动态库搜索路径;

  2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径; 

  3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;

  4.默认的动态库搜索路径/lib    /usr/lib。

通过第一条解决问题的方法是

使用-wl,-rpath= 来指定动态库的搜索路径

第二条解决方案

第三种就是在动态库搜索的conf文件中添加上你要用的那个动态库文件的路径。

第四种,把你的动态库文件放到系统动态库目录中。

猜你喜欢

转载自blog.csdn.net/qq_33113661/article/details/88991909