引言
大伙在做生信分析的时候,经常需要自己安装某个软件,比如c或c++写的软件就需要自行编译安装,其中大部分的报错也就在编译过程中缺少各种库的报错。
1.PATH
PATH是可执行文件路径 命令行中的命令,如ls等等,都是系统通过PATH找到了这个命令执行文件的所在位置,再run这个命令(可执行文件)。
所以,PATH 配置的路径下的文件可以在任何位置执行,并且可以通过which 可执行文件命令来找到该文件的位置
引入环境变量
export PATH=/usr/local/software/bin:$PATH
2. LIBRARY_PATH和LD_LIBRARY_PATH
先明确一个没什么鸟用的观点,如果你只是编译软件,那么在gcc在编译链接时链接的动态库跟LIBRARY_PATH
有关而跟LD_LIBRARY_PATH
没关系!,但是LD_LIBRARY_PATH
有什么用呢,就是在你编译完运行这个软件的时候就有用了,所以你还是要这两个库都解决了才能使用这个软件
2.1 如何引入库
优先级:编译文件中-L指定路径 > 环境变量路径 > 系统默认路径
2.1.1引入环境变量在~/.bashrc文件中简单地使用递归式赋值的形式
-
LIBRARY_PATH
环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,例如,指定gcc编译需要用到的动态链接库的目录。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):
export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH
-
LD_LIBRARY_PATH
环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径。注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):
export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH
2.1.2直接将你的路径直接加入编译文件中用 -L参数
g++ -std=c++11 -lz -L/usr/lib/ -L./include/zlib/ -L .Usr/lib/ -lm -lc
2.2使用场景
举个例子,我们开发一个程序,经常会需要使用某个或某些动态链接库,为了保证程序的可移植性,可以先将这些编译好的动态链接库放在自己指定的目录下,然后按照上述方式将这些目录加入到LD_LIBRARY_PATH
环境变量中,这样自己的程序就可以动态链接后加载库文件运行了。
区别和使用:
-
开发时(编译程序的时候):设置
LIBRARY_PATH
,以便gcc能够找到编译时需要的动态链接库,这样可以顺利通过编译链接生成可执行文件。但是注意:如果这个时候这个库不在LD_LIBRARY_PATH
目录里,或者不在系统默认的动态库链接目录里,那么程序仍然是不能运行的,因为它运行到时候找不到链接的库,就无法链接这个库。 -
发布时(程序编译完成,需要运行):设置
LD_LIBRARY_PATH
,以便程序加载运行时能够自动找到需要的动态链接库。
总结:LIBRARY_PATH
和LD_LIBRARY_PATH
都需要包含库目录才可以通过编译和使用
3.C_INCLUDE_PATH和CPLUS_INCLUDE_PATH
C_INCLUDE_PATH
(for C header files)和CPLUS_INCLUDE_PATH
(for C++ header files)的环境变量是指明头文件的搜索路径,此两个环境变量指明的头文件会在 -I 指定路径之后,系统默认路径之前进行搜索
也是可以通过引入环境变量和直接修改编译文件参数(不过这个是-l)来更改引入
优先级:编译文件中-L指定路径 > 环境变量路径 > 系统默认路径(同上)
3.1引入环境变量
export C_INCLUDE_PATH==include1:includ2:$C_INCLUDE_PATH
这条语句的命令会将C_INCLUDE_PATH
赋值为它原本的值之前再附加上include1:includ2
而组成的值。
3.2 修改编译文件中的-I
g++ -I /home/
总结来源:
linux环境变量LIBRARY_PATH和LD_LIBRARY_PATH_查看ld_library_path_Cc1924的博客-CSDN博客
Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH的区别_YOULD YGL的博客-CSDN博客
C_INCLUDE_PATH,CPLUS_INCLUDE_PATH和LIBRARY_PATH的用法_cppresearcher的博客-CSDN博客
如有侵权,请联系删除
网友评论