假设我有一个静态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();
}