Linux下链接时找不到系统动态库

起因:在一个项目上使用mkfs.jffs2工具时,报了错误提示找不到liblzo2.so.2库
开始在网上找解决方式,遇到了一个大坑,网上很多说执行sudo apt-get install liblzo2-dev:i386 这个命令来弄这个系统库就行了,当时也没多想,就执行了,而且是在公司大家都在使用的一个系统编译服务器上。。然后执行过程中居然autoremove了几个系统工具,包括gcc。。而且问题还没解决。。自己捣鼓了半天总算吧gcc这些误删除的工具重新安装了。。问题一点没解决
然后开始在编译服务器上找这个库,居然让我在/lib/i386-linux-gnu/这个目录下找到了这个库,我勒个擦,那为啥找不到呢,查网上说是因为配置问题,在/etc/ld.so.conf.d/目录下有许多配置文件,这些配置文件里有链接时自动查找的路径,看了看我的这个路径在里面没问题。。。没辙了
之前看过一个帖子说可能和位数有关系,然后开始往这边靠,真的发现这个库是32位的,而我的工具时64位的,最后在另一个电脑里找到了这个库的一个64位版本放到/lib/x86_64下解决了问题。

总结:
	1. 执行sudo apt-get install时看好了,他可能会给你卸载一些真的有用的东西,真是想骂娘了
	2. 解决问题过程中,学了几个命令,ldd xxx  ---xxx是你的应用程序,可以列出该应用依赖的动态库; ldconfig 当修改了/etc/ld.so.conf.d下的配置文件后,执行这个命令,你的应用就能找到新的动态库了,同样我新添加了一个so库,执行这个命令也是可以的,原理是这个命令更新了/etc/ld.so.cache文件,这个文件里描述了所有的链接库
	3./lib/i386-linux-gnu/这个路径下存储的是32位系统库,从这里也能看出我一开始执行的命令,即使成功了装的也是32位的库文件,我没去找怎么装64位库,有知道的感谢发我下,谢谢;/lib/x86_64-linux-gnu/放的才是64位库; 
	3. 很明显的我这里的问题就是64位的应用使用不了32位的系统库,因此这种必须是相同的才能行
	4. file xxx能查看一个库或者可执行程序是多少位的  uname -a显示Linux系统位数等信息
	总得来说,链接不到原因就是找不到库,这时候不仅要找这个库,还要找位数匹配的,同时保证在链接的配置目录里

你可能感兴趣的:(Linux下链接时找不到系统动态库)