首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从Java类调用静态库函数

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

Stack Overflow用户
提问于 2013-05-30 07:21:16
回答 1查看 701关注 0票数 0

假设我有一个静态C++库,DataPacker.lib,并链接到一个名为Command.dll的共享动态链接库。

静态库公开以下函数,

代码语言:javascript
运行
复制
//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类调用上面的函数,如下所示,

代码语言:javascript
运行
复制
//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得到了一个例外,

“本机代码库load.Observer.sendToClient()V失败”

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

EN

Stack Overflow用户

回答已采纳

发布于 2013-05-30 10:53:14

c++链接器没有将DataPacker.lib代码添加到Command.dll中。如果要调用函数,必须在Command.dll for DataPacker.lib( java调用的全局导出函数)中编写代理函数,例如dll代码:#include #ifdef _cplusplus extern "C“{ #endif JNIEXPORT void Java_Observer_sendToClient (JNIEnv *,jclass,jobject);#ifdef __cplusplus } #endif __cplusplus}#endif

代码语言:javascript
运行
复制
    //DatapackerDLL.cpp
    JNIEXPORT void JNICALL Java__Observer_sendToClient
    (JNIEnv *, jclass, jobject)
    {
     DataPacker::sendToClient();
    }
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16830226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档