页次: 1
RT,自己编译安装了一个工具,需要用到一些动态链接库,它有没有提供安装的脚本,我自己把这些动态链接库复制到lib文件夹中。
如果把这些动态库直接复制到lib文件夹,这个工具可以正常使用;
但是我看到lib文件夹里很多都是用自文件夹组织的,于是我想把这些动态库放入子文件夹里面,也就是目录为/lib/SQLiteStudio/lib/这样的,运行工具会提示找不到动态库。
我想问一下,该如何用自文件夹规整这些动态库呢?在网上搜索,有通过修改ld.so.conf.d里面的文件的,有定义环境变量LD_LIBRARY_PATH的,但是我好奇的是,我的lib文件夹里有那么多的子文件夹,但是环境里压根没有LD_LIBRARY_PATH这个变量,ld.so.conf.d里的文件也并没有包含所有的子文件夹,那么这些子文件夹里的动态库是如何发挥作用的呢?
我想用子文件夹来组织这些动态库,需要如何才能让它们发挥作用?
离线
LD_LIBRARY_PATH 是临时方案,或者处理闭源软件用。
系统自带的 /usr/lib/XXX/*.so 是使用 dlopen 运行时动态加载的,不是启动时由 ld 自动加载的。它们可以指定路径。
离线
谢谢依云大大,那是不是说具体的加载过程是由应用程序决定的,在不修改应用程序代码的情况下,无法通过修改配置文件的方法,是这些动态库可以放在子文件夹内并能使程序正常运行?
离线
有两种加载方式啊。启动时通过 ld.so 加载,或者运行时通过主动调用 dlopen 加载。后者程序可控,前者你可以配置 ld.so.conf.d。
离线
谢谢依云大大,我明白了。
离线
可以用下 `patchelf`, 我打包闭源软件的时候用这个来调整它们加载库的位置。
离线
页次: 1