java - 如何使用使 C 程序部分调用 JNI 中的 .a 库

标签 java c linux java-native-interface shared-libraries

我是 JNI 的新手,我想在 java 中调用 c 函数。

C 程序使用 .a 库。但是,为了创建用于生成 .so 库的目标文件。

我无法将 c 程序链接到 .a 库。我使用的命令是

gcc -I./toolkithdir/-I/usr/lib/jvm/java-6-openjdk-i386/include/-c -fPIC JNIFitnessPart.c -o JNIFitnessPart.o libtoolkit.a -lm

, 由于使用了-c 选项,libtoolkit.a 将不会被链接。

如何在java中调用c函数并且c函数也可以使用.a库?

提前致谢!

最佳答案

试试这个:

gcc -shared JNIFitnessPart.o libtoolkit.a -lm \
    -o libJNIFitness.so -Wl,-soname,libJNIFitness.so

GCC 可以(并且应该)使用链接器包装器,因此它可以轻松地组装您的二进制文件。

关于java - 如何使用使 C 程序部分调用 JNI 中的 .a 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15389207/

相关文章:

c - 如何在 Linux 上使用 C 和 Mingw-GCC 使用正则表达式库?

linux - 如何在 UNIX 中使用 awk 以不同方式(通过 argc 中的文件名位置)打印来自多个文件的文本?

java - 比较二维数组的行和列的整数。数独

java - 如何获得一个int数组,其中某个元素在单链列表中的位置

c - 混合数据类型导致心脏输出

c - 没有从 Kissfft 获得图像的 2d-fft 逆

c - Linux 套接字与 C : recv() not returning a delayed chunk

java - 如何提高 DynamoDB 请求的速度

java - 正在发送短信 : uid 10137 does not have android. 权限.SEND_SMS

linux - 奇怪的 Subversion 权限问题