我想编写一些 C 代码(如果它仅适用于 Linux,则可以)来动态加载一个新的共享库,然后从中调用一个方法(在运行时确定)。这似乎已经成为可能,因为 java 可以动态加载本地库,然后从中调用方法。
例如,我想做类似的事情:
int main() {
libinfo_t * lib_details = load_shared_library("libfoo.so");
run_method(lib_details, "bar", 7);
}
这将使用参数 7 调用方法“bar”(bar 是编译到 libfoo.so 中的方法)。
用例详情:
我想编译一个二进制文件,将所有共享库加载到一个目录中,并在原始程序的内存上下文中从每个共享库中运行一些方法。我希望能够通过在目录中添加/删除共享库来快速启用或禁用它。
概念证明:
根据 java 设法与 jni 代码动态链接的方式,这似乎应该是可能的。您可以使用 System.load(),并加载您选择的库。再加上从内存编译,它似乎允许您从任意库运行任意函数。http://www.java2s.com/Code/Java/JDK-6/CompilingfromMemory.htm
我尝试过的事情:
我查看了“uselib”的联机帮助页,这似乎很有用,但是我不确定一旦加载了该库该怎么做。
谷歌搜索返回http://dyncall.org/,但这并不是我所需要的——这个项目仍然需要一个函数指针来进行函数调用。
即使没有具体的答案,我也将不胜感激。谢谢!