当前位置: 首页 > 知识库问答 >
问题:

如何编译Java原生库?

松高歌
2023-03-14

我希望这是一个正确的词,“compile”。我在这里问,因为我甚至不知道谷歌需要什么来获取更多信息。

我想在这里使用此库:http://jiggawatt.org/badc0de/android/#gifflen

下载提供了一堆.cpp和.h文件。据我了解,我需要一个.so文件才能使用System.loadLibrary(libName)。

我不知道的是如何将这些C文件编译成必要的. so文件?

共有1个答案

邵宜年
2023-03-14

您可以使用下面提到的命令创建共享对象文件。

gcc -shared -fpic -o <so-file-name>.so a.c b.c

在 Mac OS X 上,编译方式:

g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so
g++ class_user.cc -o class_user

在 Linux 上,编译方式:

g++ -fPIC -shared myclass.cc -o myclass.so
g++ class_user.cc -ldl -o class_user

引用:

Linux 上的 C 动态共享库

使用gcc命令行从. c文件构建. so文件

示例教程

使用带有命令的 java 运行 .so 文件的示例代码:

HelloJNI.c

#include <jni.h>
#include <stdio.h>
#include "HelloJNI.h"

JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) {
   printf("Hello World!\n");
   return;
}

HelloJNI.java

public class HelloJNI {
   static {
      System.loadLibrary("hello"); // hello.dll (Windows) or libhello.so (Unixes)
   }
   // A native method that receives nothing and returns void
   private native void sayHello();

   public static void main(String[] args) {
      new HelloJNI().sayHello();  // invoke the native method
   }
}

使用.java文件在.c文件上运行的步骤

javac HelloJNI

javah HelloJNI

gcc -shared -fpic -o libhello.so -I/usr/java/default/include -I/usr/java/default/include/linux HelloJNI.c

java  -Djava.library.path=. HelloJNI
 类似资料:
  • 所有使用指南都显示了如何在单个 JAR 文件上运行。但我相信大多数项目通常在类路径上使用多个JAR(例如Gradle默认方式)。如何告诉本机映像将它们全部捆绑到一个可执行文件中?

  • 当使用和选项进行交叉编译时,针对与本机系统相同的体系结构和硬件,我注意到 似乎比本机构建的计数器部分生成更差的优化 请考虑以下简单的代码示例: 当使用在下进行优化时,本机 target代码生成生成: 使用

  • 编译器架构

  • 校验码 奇偶校验 通常用于对少量数据的校验 奇校验 将信息数据的各位进行模二加法并作为校验码的称为奇校验。 偶校验 将信息数据的各位进行模二加法并取反作为校验码的称为偶校验。 海明码 采用多位校验码的方式,可以发现、纠正错误。数据位和校验位必须满足关系式:2校验位-1≥数据位+校验位。码距至少是3。 循环冗余校验码 检错能力非常强,但是不能纠错。编码长度(CRC字长)为数据位+校验位 文法 终结符

  • 我已经编译了我的。proto文件使用protobuf编译器并收到了一组Java文件。我收到了一份原始文件。java文件和。中每个项目的java文件。proto文件,包括消息类型和每个RPC调用,例如publicKeyRequest。java和Quote。java作为RPC和请求参数类型。 这是所有需要的文件吗,因为我似乎仍然无法从服务器获得任何简单的响应? 我想为PublicKeyRequest