我正在尝试构建一个 Linux 库 (*.so) 以在 Java 应用程序中使用它。这个库本身加载一个带有本机函数的 dll 文件。
这是我的 C++ 代码:
__delspec(dllexport) void __cdecl GetDllVersion(void){
typedef int(*GetDllVersion)(int*,int*,int*,int*);
void* lib = dlopen("~/lib.dll",RTLD_NOW);
cout << "Loading Symbol..." << endl;
GetDllVersion getVer= (GetDllVersion) dlsym(lib,"GetDllVersion");
dlclose(lib);
}
代码编译wineg++ -shared lib.cpp -o libexports.so -Wl,--no-as-needed -ldl
没有错误。
Java 应用程序在循环中打印出“Loading Symbol...”,然后在没有任何消息的情况下终止。我可以确定这与 dlsym() 有关。
nm -D lib.so
我可以查看 lib.so 内部。函数 GetDllVersion() 确实是这个库中的一个符号。
有人能告诉我为什么会有一个无限循环并且 Java VM 正在终止吗?
问候乌尔米