error while loading shared libraries的解决方法

和本菜鸟一样Linux的初学者在运行一些开源项目的时候,常常会出现如下错误:


./tests: error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or directory ./tests: error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or directory


从error信息可以很容易的看出,在运行test的时候,没有找到XXXX.so库,显然这是一个链接错误。那么Linux这个动态库加载的过程由谁来负责呢 ? 答案是动态加载器(dynamic loader)。这个动态加载器负责,装载可执行程序所需要的动态库。那么动态加载器怎么知道取哪里找这些动态库呢 ? Linux 上有一个config文件 /etc/ld.so.conf. 这个文件内记录了各个.so 的位置。如果需要的话,可以把指定目录下的XXX.so给 include进这个文件中。

一般而言有很多的.so动态库都放在 /usr/lib 路径下,还有一些.so动态库,可以能是一些开源项目编译出来的,可能在 /usr/local/lib目录下。比如我遇到这个问题的时候,就是因为有一个依赖的.so库在 /usr/local/lib,而可执行程序运行的时候找不到。所以呢,在/etc/ld.so.conf 文件中把 /usr/local/lib加到文件中,然后

ldconfig -v

因为,这个问题是出来执行,链接的时候找不到.so库,所以呢应该是 ld.so.conf这个文件中没有包含该.so库所在的路径。试想以下,如果在编译阶段,电脑里没有该库,那么./configure的时候就应该会检查出来。所以这个.so库,电脑上应该是有的

--------------------------------------------------------------------------------

在编译某些开源项目的时候,可能还会遇到如下问题,比如某个开源项目依赖与其他库,比如 freetype2,在编译的这个项目的时候可能会出现如下错误。

/usr/include/ft2build.h:56:38: error : freetype/config/ftheader.h : No such file or directory



在大多数linux的发行版上都默认安装了freetype2,去相关的路径下看发现 ftheader.h的真实路径应该是/usr/include/freetype2/freetype/config/ftheader.h 。 对于这个问题呢,可以建立一个软链接指到正确的路径下。


ln -s /usr/include/freetype2/freetype/ /usr/include/freetype




至于原因显然是 使用freetype的开源项目没有想到freetype还会搞出个 freetype2的新版本。



你可能感兴趣的:(Tricks)