编译时找不到动态库解决方案

在linux下编译程序经常会出现找不到动态库的问题,通常有以下几种解决方法

源码包安装

一些开源库的安装可以通过源码包实现,通常需要经过一下步骤
—下载源码包,并解压(tar -zxvf),可以在解压目录下找到configure文件,一般还会有文件README或install
— 执行./configure
进行源码安装,通过–prefix == /usr/xxxx 可以自定义安装目录(./configure --prefix=/foo),默认时会安装在/usr/local目录下
检测安装环境
生成makefile
make
编译源代码生成一些动态(静态)库和可执行程序
sudo make install
将数据拷贝到对应目录,如果目录不存在则创建该目录
如果不指定时会使用默认目录:/usr/local(用户自己安装一些库,可执行程序的默认目录)或者是/opt。在/usr/local下的子目录下又有/include/local/include(存放头文件)/usr/local/bin(二进制可执行文件)/usr/local/lib(库文件)

—找不到动态库的时候可以

ldd a.out

可以查看到a.out需要的动态库和动态库的链接器

方法一

—找到库文件

sudo find /usr/local -name"libevent.so"

—将xxx.so文件放到/usr/lib目录中

方法二

—找到库文件后将文件放到环境变量LD_LIBRARY_PATH中

export LD_LIBRARAY_PATH = XXX(库绝对路径)

将该代码可以放到~/.bashrc或者是/etc/profile

—~/.bashrc 用户级别
1.设置完后需要重启终端 更换用户失效
2.或者在设置完后 .~/.bashrc(此处.等价于source)

—/etc/profile 系统级别
1.设置完后需要重启虚拟机
2.或者在设置完后./etc/profile

方法三

—修改/etc/ls.so.conf
1.将动态库路径(绝对路径)添加到该文件中
2.更新设置sudo ldconfig -v(-v是显示更新信息)

重新编译

然后就可以在编译时指定库

gcc text.c -levent

你可能感兴趣的:(LINUX专栏)