Java - 我有一个库(.a/.so)和 header (.h),如何使用Java调用它们的函数?

标签 java c++ linux ubuntu .a

有人给我发了他的静态库(lib.a)和一个头文件(lib.h),它应该是用C++编写的,我已经使用gcc编译器将静态库(lib.a)转换为共享库(。所以)。现在我想使用Java调用库来使用它的功能。

我尝试过 System.load 和 System.loadLibrary 但我不知道如何调用它的函数。例如,我看到头文件中有一个函数调用 MoveFront(int),它将返回状态的整数。

extern int MoveFront(int);

有办法做到吗?谢谢。

我使用的是 Ubuntu 13.10、JDK 1.8.0_20、gcc 4.6.3。

最佳答案

你不能直接在Java中调用它们

你必须使用 JNI 构建一座桥梁

将 lib.a 与bridge.c链接到libbridge.so中 然后,java可以使用System.loadLibrary("bridge")来使用它

这里有一些指南 https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

关于Java - 我有一个库(.a/.so)和 header (.h),如何使用Java调用它们的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26034357/

相关文章:

java - JSF带参数重定向到其他页面

java - 在引用管理表 hibernate 的用户表上插入值 1

c++ - 在保留列的同时对二维 vector 进行排序

c++ - 如何将 std::regex_match 与 CString 一起使用?

java - 为什么子流程的输出顺序错误?

java - 递归需要不必要的返回并重新启动应用程序

java - 使用此路径检索 SD 卡上的文件 : "/document/primary:..."

c++ - Visual Studio 2010 默认属性表似乎在调试和发布配置下都有链接,这是怎么回事?

php - 无法从 PHP 向 TMUX session 发送命令

linux - MongoDb 和 YCSB : workload A: why update latency is so small?