gpt4 book ai didi

macos - dlopen() 与库之间的依赖关系

转载 作者:行者123 更新时间:2023-12-02 04:02:20 24 4
gpt4 key购买 nike

我的程序使用通过 dlopen() 动态加载的插件。这些插件的位置可以是任意的,因此它们不一定在库路径中。在某些情况下,一个插件需要依赖另一个插件。因此,如果 A 和 B 是动态库,我将首先加载 A,然后加载使用 A 中定义的符号的 B。

我对 dlopen() 文档的阅读暗示,如果我指定 RTLD_GLOBAL 这应该都有效。但事实并非如此。当我在第二个库上调用 dlopen() 时,它失败并显示一个错误,说它找不到第一个(已经用 dlopen() 加载了):

Error loading library /usr/local/openmm/lib/plugins/libOpenMMRPMDOpenCL.dylib: dlopen(/usr/local/openmm/lib/plugins/libOpenMMRPMDOpenCL.dylib, 9): Library not loaded: libOpenMMOpenCL.dylib
Referenced from: /usr/local/openmm/lib/plugins/libOpenMMRPMDOpenCL.dylib
Reason: image not found

我怎样才能使这项工作?

最佳答案

在这里看到这个答案:
dlopen() error image not found

如果您将库修改为具有 @rpath/blah.dylib 的安装名称,您将能够执行此操作。

编辑:

我也在使用 cmake,使用这个:

set_target_properties(${MY_LIB} PROPERTIES BUILD_WITH_INSTALL_RPATH 1 INSTALL_NAME_DIR "@rpath")

这也不会破坏其他平台上的内容,但请确保您没有调用 CMAKE_SKIP_RPATH 否则它不会被调用。

关于macos - dlopen() 与库之间的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com