gpt4 book ai didi

c++ - 在运行时按路径加载共享库

转载 作者:IT老高 更新时间:2023-10-28 23:27:49 24 4
gpt4 key购买 nike

我正在构建一个 Java 应用程序,该应用程序使用一个用 C++ 编写并针对不同操作系统编译的共享库。问题是,这个共享库本身依赖于它通常在适当的环境变量(PATHLIBRARY_PATHLD_LIBRARY_PATH)下找到的附加库.

我可以——但不想——设置这些环境变量。我宁愿在运行时从给定路径加载所需的共享库 - 就像插件一样。不 - 我不希望任何启动应用程序在新环境中启动新进程。有人知道如何实现吗?

我知道这一定是可能的,因为我使用的其中一个库能够从给定路径加载其插件。当然我更喜欢平台无关的代码,但如果这不可能,Windows、Linux 和 MacOS 的单独解决方案也可以。

编辑我应该提到我希望使用的共享库是面向对象的,这意味着单个函数的绑定(bind)不会这样做。

最佳答案

在 UNIX/Linux 系统中,您可以使用 dlopen。那么问题是您必须通过 dlsym

获取所需的所有符号

简单示例:

typedef int (*some_func)(char *param);

void *myso = dlopen("/path/to/my.so", RTLD_NOW);
some_func *func = dlsym(myso, "function_name_to_fetch");
func("foo");
dlclose(myso);

将加载 .so 并从那里执行 function_name_to_fetch()。有关更多信息,请参见手册页 dlopen(1)。

关于c++ - 在运行时按路径加载共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7626526/

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