LD_LIBRARY_PATH详解,从此不害怕安装C语言源代码软件(欢迎海南大学的51粉丝)

下面是正文:

我在B站上面讲解过软件安装全集,其实是怕新手还没入门就放弃,所以只是简单分类,然后强调大家尽量不要碰C源代码软件,能conda就conda,实在不行找二进制可执行程序:

其实,C源代码的确是有点难度,但是掌握了LD_LIBRARY_PATH概念就还好了,下面我就简单介绍一下:

LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。

非常多的软件没有root权限安装会比较困难,主要就是因为各种系统库文件,也就是LD_LIBRARY_PATH这个环境变量里面的文件。比如前面我提到的lancet软件需要的库文件如下:

-llzma -lbz2 -lz -ldl -lpthread -lcurl -lcrypto -lbamtools

可以使用 ls /usr/lib |grep lib 查看自己是否有需要的库文件,当然还需查看其它库文件目录:echo $LD_LIBRARY_PATH 里面一般可以看到七八个已经定义好的库文件搜索路径。

当执行函数动态链接.so时,如果此文件不在缺省目录下 /lib和/usr/lib,那么就需要指定环境变量LD_LIBRARY_PATH 假如现在需要在已有的环境变量上添加新的路径名,则采用如下方式: LD_LIBRARY_PATH=NEWDIRS:$LD_LIBRARY_PATH (newdirs是新的路径串), 实例如下;

cpp export LD_LIBRARY_PATH=/export/apps/anaconda2/2.4.1/lib/:$LD_LIBRARY_PATH ¨G1G /usr/bin/ld: cannot find -llzma collect2: error: ld returned 1 exit status make[1]: *** [lancet] Error 1 make[1]: Leaving directory `/home/jianmingzeng/biosoft/lancet/lancet/src' cp: cannot stat `lancet': No such file or directory ¨G2G shell gcc -llzma --verbose ¨G3G locate liblzma /export/apps/anaconda2/2.4.1/lib/liblzma.a /export/apps/anaconda2/2.4.1/lib/liblzma.la /export/apps/anaconda2/2.4.1/lib/liblzma.so /export/apps/anaconda2/2.4.1/lib/liblzma.so.5 /export/apps/anaconda2/2.4.1/lib/liblzma.so.5.0.5 ¨G4G export LD_LIBRARY_PATH=/export/apps/anaconda2/4.0.0/lib/:$LD_LIBRARY_PATH export LIBRARY_PATH=/export/apps/anaconda2/4.0.0/lib/:$LIBRARY_PATH

为什么修改LD_LIBRARY_PATH呢

因为运行时动态库的搜索路径的先后顺序是: 1.编译目标代码时指定的动态库搜索路径; 2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径; 3.配置文件/etc/ld.so.conf中指定的动态库搜索路径; 4.默认的动态库搜索路径/lib和/usr/lib;

这个顺序是compile gcc时写在程序内的,通常软件源代码自带的动态库不会太多,而我们的/lib和/usr/lib只有root权限才可以修改,而且配置文件/etc/ld.so.conf也是root的事情,我们只好对LD_LIBRARY_PATH进行操作啦。

永久性添加

每次我使用该软件都需要临时修改库文件,因为上面的方法是临时设置环境变量 LD_LIBRARY_PATH ,重启或打开新的 Shell 之后,一切设置将不复存在。

为了让这种方法更完美一些,可以将该 LD_LIBRARY_PATHexport 语句写到系统文件中,例如 /etc/profile/etc/export~/.bashrc 或者 ~/.bash_profile 等等,取决于你正在使用的操作系统咯。

原文发布于微信公众号 - 生信技能树(biotrainee)

原文发表时间:2018-11-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Clive的技术分享

Redis事务涉及的watch、multi等命令

作用: 用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 用法:

1085
来自专栏C/C++基础

shell脚本实例

检查脚本书写完成后,需要crontab来定期执行该脚本,意在每隔多长时间去检测一次。crontab命令选项如下:

1102
来自专栏Seebug漏洞平台

TP-LINK WR941N路由器研究

是TP-Link WR940N后台的RCE, 手头上正好有一个TP-Link WR941N的设备,发现也存在相同的问题,但是CVE-2017-13772文章中给...

4098
来自专栏静晴轩

浅谈android中的目录结构

之前在android游戏开发中就遇到本地数据存储的问题:一般情形之下就将动态数据写入SD中存储,在没有SD卡的手机上就需另作处理了;再有在开发android应用...

34610
来自专栏张戈的专栏

【ES私房菜】Logstash 安装部署及常用配置

Logstash来自ES家族,是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。

1.3K0
来自专栏CSDN技术头条

一组 Redis 实际应用中的异常场景及其根因分析和解决方案

在上一场 Chat《基于 Redis 的分布式缓存实现方案及可靠性加固策略》中,我已经较为全面的介绍了 Redis 的原理和分布式缓存方案。如果只是从“会用”的...

3323
来自专栏Seebug漏洞平台

TP-LINK WR941N路由器研究

作者:Hcamael@知道创宇404实验室 之前看到了一个CVE, CVE-2017-13772 是TP-Link WR940N后台的RCE, 手头上正好有一个...

3096
来自专栏云霄雨霁

死锁、饥饿和活锁

2914
来自专栏技术之路

翻译qmake文档(二) Getting Started

原英文文档: http://qt-project.org/doc/qt-5/qmake-tutorial.html       本教程教讲授qmake基础知识。...

1835
来自专栏java初学

memcached

2966

扫码关注云+社区

领取腾讯云代金券