无法从Java类调用静态库函数



假设我有一个静态c++库DataPacker。

Command.dll的共享动态链接库。

静态库公开了以下函数

//Datapacker.h
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java__Observer_sendToClient
(JNIEnv *, jclass, jobject);
#ifdef __cplusplus
}
#endif
//Datapacker.cpp
JNIEXPORT void JNICALL Java__Observer_sendToClient
(JNIEnv *, jclass, jobject)
{
//Print
}

现在我试着从java类中调用上面的函数,如下所示,

//Observer.Java
class Observer
{
static{
System.loadLibrary("Command");
}
public static void main(String[] args) {
try{
sendToClient();
} 
catch (Throwable t){
System.err.println("Native code library failed to load.n" +  t.getMessage());
}
}
private static native void sendToClient();
}

但是我从java得到以下异常,

"本机代码库加载失败。observer . sendtoclient ()V"

当它从DataPacker移动时,调用工作正常。Lib到command.lib。请帮助。

c++ link没有添加DataPacker。lib代码到Command.dll中。如果你想调用函数,你必须在Command.dll中为DataPacker编写代理函数。Lib(用于Java调用的全局导出函数)例如DLL代码:# include# ifdef _ cplusplusextern "C" {# endifJNIEXPORT void JNICALL Java_Observer_sendToClient(JNIEnv *, jclass, jobject);# ifdef __cplusplus}# endif

    //DatapackerDLL.cpp
    JNIEXPORT void JNICALL Java__Observer_sendToClient
    (JNIEnv *, jclass, jobject)
    {
     DataPacker::sendToClient();
    }

最新更新