我的程序使用某些供应商的'libone.so'对象。它在系统中具有自定义位置。程序搜索该库的位置,然后使用dlopen打开它。当“ libone.so”在后台进行一些操作并开始加载“ libsecond.so”时,会出现问题。我用strace看到dlopen尝试通过为ldconfig定义的标准路径查找“ libsecond.so”,而不使用“ libone.so”的位置作为可能的路径之一。
是否有可能在'libone.so'中配置dlopen调用,以便它将从'libone.so'的位置加载'libsecond.so'? (“ libsecond.so”与“ libone.so”位于同一路径)
ps。在程序启动之前,我不会影响系统配置(ldconf路径)。我需要在程序中解决此问题。
pss。如果我将“ libone.so”的路径添加到/etc/ld.so.conf.d/custom.conf,那么问题就解决了。
我认为您有三种选择:
创建脚本文件(例如bash,Python等),然后在执行二进制程序并使之可执行之前将其设置为LD_LIBRARY_PATH
。
使用-rpath
链接器选项,除了LD_LIBRARY_PATH
之外,还将固定的绝对路径添加到动态链接器将使用的搜索路径中。
dlopen
,具有从下到上的绝对路径。即首先dlopen
依赖项,然后是dlopen
主库。
我希望第一个选项。