加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

【make install】自定义安装目录,添加动态链接库 【--prefix】

发布时间:2020-12-14 01:48:43 所属栏目:Linux 来源:网络整理
导读:怎么卸载make install安装的软件? https://www.zhihu.com/question/20092756 ? 怎么指定安装目录以及对应的添加动态库的方法 linux库在不指定安装路径时:如:make install,库将安装于默认安装路径,即为根目录下的 /usr/local/inlcude/对应库的库文件夹/对

怎么卸载make install安装的软件?

https://www.zhihu.com/question/20092756

?

怎么指定安装目录以及对应的添加动态库的方法

linux库在不指定安装路径时:如:make install,库将安装于默认安装路径,即为根目录下的 /usr/local/inlcude/对应库的库文件夹/对应库的头文件 ?和 ?/usr/local/lib/对应库 ,在安装好库之后,还是不能直接调用的,原因是 :(以下为转载内容)

?

?error while loading shared libraries: xxx.so.x"错误的原因和解决办法 2012-06-28 10:05:06
分类: LINUX
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误,比如:


tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory


原因一般有两个,一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对,遇到这种情况那就去网上下载并安装上即可.?


另外一个原因就是已经安装了该共享库,但执行需要调用该共享库的程序的时候,程序按照默认共享库路径找不到该共享库文件.?


所以安装共享库后要注意共享库路径设置问题,如下:


1) 如果共享库文件安装到了/lib或/usr/lib目录下,那么需执行一下ldconfig命令


ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.?


2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下,那么在执行ldconfig命令前,还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中,如下:


# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig


3) 如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下,?但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找共享库.?


LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录,这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下,其中有一大堆库文件在/usr/local/mysql/lib下面,则可以在.bashrc或.bash_profile或shell里加入以下语句即可:


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


一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用.


4)如果程序需要的库文件比系统目前存在的村文件版本低,可以做一个链接
比如:
error while loading shared libraries: libncurses.so.4: cannot open shared
object file: No such file or directory


ls /usr/lib/libncu*
/usr/lib/libncurses.a ? /usr/lib/libncurses.so.5
/usr/lib/libncurses.so ?/usr/lib/libncurses.so.5.3


可见虽然没有libncurses.so.4,但有libncurses.so.5,是可以向下兼容的
建一个链接就好了
ln -s ?/usr/lib/libncurses.so.5.3 ?/usr/lib/libncurses.so.4

?

运行以下ldconfig更新下共享库就可以了。

?

怎么添加动态库

vi /etc/ld.so.conf

?

?

分别添加了两个路径,每个路径占一行。编辑完后,重新加载库:

/sbin/ldconfig -v

命令ldconfig -v |grep "库名" ?查看系统是否有加载该库

缓存文件默认是/etc/ld.so.cache,此文件保存已经排好序的动态链接库名字列表。

总结:

1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到

2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到。比如安装了一个到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在程序运行时被找到。

3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。

4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。

5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下(更新动态缓存库)

6.?ldconfig -p 命令可以查看每个动态库的路径

指定运行时动态库位置的三种方式
在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可通过三种方法来指定:方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径;方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径;方法三:在编译目标代码时指定该程序的动态库搜索路径。?
Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。

通过配置文件
修改/etc/ld.so.conf文件。
其文件内容为:
[[email?protected]_24_16_centos etc]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
[[email?protected]_24_16_centos etc]#
所以,可以在文件夹/etc/ld.so.conf.d/中添加自己的文件,例如:创建文件gx.conf,
然后在文件中添加动态库路径,例如:
/root/code/opencv/opencv-3.2.0/build/build/lib
注意,保存退出之后需要执行命令ldconfig刷新当前缓存。
通过gcc参数指定
-Wl,-rpath=${LD_PATH} #-Wl,-rpath=<动态库所在路径>
g++ ${RPATH} ./opencv_knn.cpp -o knn
通过设置环境变量
只对当前shell有效,关闭shell或者退出当前用户则环境变量配置及无效了。

export LD_LIBRARY_PATH=/root/code/opencv/opencv-3.2.0/build/build/lib#LD_LIBRARY_PATH=<动态库所在位置>--------------------- 作者:土戈 来源:CSDN 原文:https://blog.csdn.net/f110300641/article/details/82657972 版权声明:本文为博主原创文章,转载请附上博文链接!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读