如何正确使⽤环境变量LD_LIBRARY_PATH
本⽂来⾃CSDN博客,转载请标明出处。
LD_LIBRARY_PATH环境变量主要是⽤于指定动态链接器(ld)查ELF可执⾏⽂件运⾏时所依赖的动态库(so)的路径,其内容是以冒号分隔的路径列表。ld链接器将优先在该变量设置的路径中查,若未到则在标准库路径/lib和/usr/lib中继续搜索。
临时设置LD_LIBRARY_PATH环境变量的最佳⽅式是:在执⾏你的程序前,先在bash中通过命令⾏或脚本来设置,这样你的特殊设置对系统的其它程序的运⾏⽽⾔是隔离的,不会影响其他程序对依赖库的查路径,因为在bash中设置的环境变量只对本次会话有效。在你下次通过SSH⼯具连接到系统时,新会话的系统环境变量参数不受上次会话的设置影响。
如:
$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path"
$ ./program环境变量path误删有影响吗
但是,你如果希望对LD_LIBRARY_PATH环境变量的设置永久⽣效,上⾯的⽅式就不适合了。如果你的
所有程序都需要链接到某个⾃定义的查路径指定的动态库⽂件,若某次执⾏程序前你忘记了设置LD_LIBRARY_PATH环境变量,这样你的程序会链接到其他动态库,可能会导致诡异的结果或意外崩溃,⽽且在可能存在潜在的安全问题。
如果不考虑上述的各种情况,你可以通过修改home⽬录下的 .bashrc ⽂件来设置LD_LIBRARY_PATH环境变量,这样每次当你启⽤⼀个会话连接到系统时,系统会⾃动执⾏该⽂件指定的命令,这样免去了每次⼿动设置相关参数的⿇烦。增加如下⼀⾏:
export LIBRARY_PATH="/list/of/library/paths:/another/path"
⼀般情况下,只有当程序所需的依赖库不是系统标准安装的库或对库的版本特定要求时,可以指定 LD_LIBRARY_PATH环境变量实现。
通过下⾯的命令可以查看可执⾏⽂件或库⽂件本⾝对所依赖的库的情况:
$ ldd ~/myprogram
输出类似:
librt.so.1 => /lib/librt.so.1 (0x00002b4eca08e000)
libc.so.6 => /lib/libc.so.6 (0x00002b4eca49f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00002b4eca7df000)
/lib64/ld-linux-x86-64.so.2 (0x00002b4ec9e72000)
libmylib.so.1 => not found
检查结果表明,链接器⽆法到依赖的库libmylib.so.1
我们假设存在这个库在~/yprogdir/lib/libmylib.so.1, 现在我们可能通过设置LD_LIBRARY_PATH环境变量以便链接器到。
$ export LD_LIBRARY_PATH="~/myprogdir/lib/:$LD_LIBRARY_PATH"
$ ldd ~/myprogram
输出如下:
librt.so.1 => /lib/librt.so.1 (0x00002b4eca08e000)
libc.so.6 => /lib/libc.so.6 (0x00002b4eca49f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00002b4eca7df000)
/lib64/ld-linux-x86-64.so.2 (0x00002b4ec9e72000)
libmylib.so.1 => ~/myprogdir/lib/libmylib.so.1 (0x00002b4eca9fa000)
这样动态链接器就可能到所有需要的库⽂件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论