如何更改库包含来自bash的二进制文件的路径?

aug*_*tin 1 c++ linux bash kde4 include-path

我在Kubuntu上正确安装了一个软件.

现在,我正在修补和测试它的一些库.

如何从bash启动软件,以便加载我的修补库而不是官方库?

例如:
官方的lib定位/ usr/lib中/
我的补丁库(测试开发过程中使用)是在/ home /用户的/ dev/lib目录/

我试过了:

$ set LD_LIBRARY_PATH=/home/user/dev/lib/  
$ binary_app &
Run Code Online (Sandbox Code Playgroud)

但无济于事.

我倒认为可以从庆典中设置一个解决方案,但如果它是不可能的,我还可以修改这个C++软件的cmake的文件.

目的是允许我使用vanilla libs轻松启动应用程序,或者使用我的修补库来查看差异.

编辑:这是一个KDE .so文件

我正在测试的库是一个KDE4库.官方lib位于/ usr/lib/kde4 /中.在该目录中,没有任何库以lib前缀开头.

我是否这样做:

/lib/ld-linux-x86-64.so.2 --list  --library-path PATH EXEC  
Run Code Online (Sandbox Code Playgroud)

要么

ldd EXEC  
Run Code Online (Sandbox Code Playgroud)

图书馆根本没有列出.

另一方面,如果将原始库从/ usr/lib/kde4 /移开,则应用程序启动但缺少相应的功能.

KDE4库是否以特定方式加载?也许要设置的变量是不同的......

编辑2

所有的答案都很好而且很有用......不幸的是,事实证明这个问题似乎与lib路径设置无关.我正在处理插件架构,并且.so加载路径似乎在应用程序的某处硬编码.我需要在源代码中花费更多时间来了解正在发生的事情......谢谢,并且+1给所有人.

Jan*_*Vos 7

来自'man bash':

当要执行除builtin或shell函数之外的简单命令时,将在由以下内容组成的单独执行环境中调用它.除非另有说明,否则值将从shell继承.

[....]

·标记为导出的shell变量和函数,以及为该命令导出的变量,在环境中传递

如果要执行的程序可以看到变量,则需要"导出"变量.

但是,您也可以尝试以下操作:

/lib/ld-linux.so.2 --library-path PATH EXECUTABLE

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html


Kar*_*ldt 5

尝试export LD_LIBRARY_PATH=...而不是设置.

  • @augustin - 你不会看到与shell的区别.但是从shell开始的进程只继承导出的变量. (3认同)