无法从Java类调用静态库函数 我有一个静态C++ LIB,DATAPACR.LIB,并链接到一个共享的动态链接库,名为Cudith.DLL.< /P>

无法从Java类调用静态库函数 我有一个静态C++ LIB,DATAPACR.LIB,并链接到一个共享的动态链接库,名为Cudith.DLL.< /P>,java,c++,Java,C++,静态库公开了以下函数: //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

静态库公开了以下函数:

//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++链接器没有将DataPacker.lib代码添加到Command.dll中。 如果要调用函数,必须在Command.dll中为DataPacker.lib(java调用的全局导出函数)编写代理函数 例如,dll代码: #包括 #ifdef_cplusplus 外部“C”{ #恩迪夫 JNIEXPORT void JNICALL Java\u Observer\u sendToClient (JNIEnv*,jclass,jobject); #ifdef_uucplusplus } #恩迪夫

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

谢谢你,凯恩。所以,你的意思是没有办法在静态LIB DATAPACK.LIB中定义函数而不修改命令。LIB?我也想知道Windows和Solaris C++编译器之间的区别。该函数可以在solarais平台中成功调用。通过修改.def文件可以解决该问题。我在command.def文件中添加了公开的函数名,它可以通过command.dll调用。谢谢你的帮助。