在自定义库位置的情况下,使用dlopen加载依赖库

问题描述 投票:2回答:1

我的程序使用某些供应商的'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,那么问题就解决了。

c++ linux dlopen shared-objects
1个回答
0
投票

我认为您有三种选择:

  1. 创建脚本文件(例如bash,Python等),然后在执行二进制程序并使之可执行之前将其设置为LD_LIBRARY_PATH

  2. 使用-rpath链接器选项,除了LD_LIBRARY_PATH之外,还将固定的绝对路径添加到动态链接器将使用的搜索路径中。

  3. dlopen,具有从下到上的绝对路径。即首先dlopen依赖项,然后是dlopen主库。

  4. 我希望第一个选项。

© www.soinside.com 2019 - 2024. All rights reserved.