21xrx.com
2024-11-22 08:12:46 Friday
登录
文章检索 我的文章 写文章
Java 如何调用 C++ 动态库?
2023-06-11 14:27:41 深夜i     --     --
Java C++ 动态库

Java 和 C++ 是两种不同的编程语言,各自有着自己的优势和特点。有时候,在 Java 中需要调用一些 C++ 的函数,这时候就需要用到 C++ 动态库。本文将介绍如何将 C++ 动态库导出为 Java 可以识别的文件,并演示如何在 Java 中调用 C++ 动态库的函数。

首先,我们需要编写一个简单的 C++ 函数和库:

++

#include

extern "C" {

 int add(int a, int b) {

  return a + b;

 }

}

这个函数很简单,接受两个整数作为参数,返回它们的和。"extern C" 是一个关键字,表示函数的名称在编译时使用 C 语言的命名规则,以便于在其他语言中使用。

接下来,我们使用 CMake 生成动态库文件。在 CMakeLists.txt 文件中加入下面的代码:

make

cmake_minimum_required(VERSION 3.10)

project(add)

set(CMAKE_CXX_STANDARD 11)

add_library(add SHARED add.cpp)

这个文件告诉 CMake 生成一个名为 libadd.so 的动态库文件,我们可以在 Java 中使用它。

现在,我们可以使用 Java 调用 C++ 函数了。在 Java 文件中,我们需要声明一个 native 方法,并将其指向动态库中的函数:


public class Add {

  static {

    System.loadLibrary("add");

  }

  public static native int add(int a, int b);

  public static void main(String[] args) {

    int sum = add(1, 2);

    System.out.println("Sum: " + sum);

  }

}

这个示例程序中,我们首先使用 System.loadLibrary() 加载动态库文件,然后定义了一个 native 方法,用于调用动态库文件中的函数。在 main() 方法中,我们调用 add() 方法并打印返回的结果。

接下来,我们需要编译 Java 和 C++ 文件。在 javac 和 g++ 命令行中加入下面的代码:


javac Add.java

g++ -O2 -fPIC -shared add.cpp -o libadd.so

这个命令将会编译 Java 文件和 C++ 文件,并生成 libadd.so 动态库文件。在运行 Java 程序之前,我们需要将 libadd.so 文件放到 Java 类库可以找到的地方。可以将它放在 /usr/lib 或者 /usr/local/lib 中。

现在,我们就可以运行 Java 程序了:


java Add

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复