linux 程序运行时,提示找不到 xx.so.x,如何查询linux程序需要哪些库,linux链接库的添加方法

问题原因查找

今天打算再linux中运行 test.out 程序时,提示

# ./test.out 
./test.out: can't load library 'libfreetype.so.6'

出现这种提示有两种可能,一是确实没有这个库,再就是有这个库,但是运行程序时,系统不知道去哪里找这个库。于是,执行ldd命令,可以看到:

# ldd test.out
    ...
    libfreetype.so => /usr/local/lib/libfreetype.so(0x00007f767af0a000)
    ...

也在预料中,很多库都会在这个目录里。

解决问题

可以将该路径加入环境变量:

export PATH=/usr/local/lib:$PATH

再次运行,依然报同样的错误。稍稍思考一下,知道应该将该路径加入LD_LIBRARY_PATH环境变量里,这个环境变量看其名字就知道是专为库设置的。

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

再次运行,发现 test.out 程序正常运行了。

将环境变量加入 bashrc

之所以进行这一步,是因为 export 命令只对当前终端起作用,关闭该终端,再打开,就必须再次执行export一次,这样就显得比较麻烦。所以可以将export加入bashrc文件,这样每次打开终端,系统会自动执行export,就一劳永逸了。

sudo vim ~/.bashrc
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH  # 在文件最后加入
source ~/.bashrc

搞定。

阅读更多:   Linux笔记
添加新评论

icon_redface.gificon_idea.gificon_cool.gif2016kuk.gificon_mrgreen.gif2016shuai.gif2016tp.gif2016db.gif2016ch.gificon_razz.gif2016zj.gificon_sad.gificon_cry.gif2016zhh.gificon_question.gif2016jk.gif2016bs.gificon_lol.gif2016qiao.gificon_surprised.gif2016fendou.gif2016ll.gif