如何调用 C++来自爪哇?

发布于 2024-12-07 06:59:03 字数 129 浏览 0 评论 0 原文

我想从 Java 调用 C++ 方法。我读到了有关 JNI 的内容,但我不知道如何获取所有库文件以及应该将其保存在哪里以便从命令行运行程序。

有没有办法从 Eclipse 本身调用 C++ 方法,因为我用它来运行 Java 类。

I wanted to call a C++ method from Java. I read about JNI, but I am not getting how to get all the library files and where I should keep it in order to run the program from command line.

Is there any way to call a C++ method from Eclipse itself, because I am using it to run Java classes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

笑饮青盏花 2024-12-14 06:59:03

虽然我过去使用过 JNI-C++ 桥接(虽然只使用了一点),但它可能有点难看。您可能需要考虑使用 SWIG 来帮助您生成所有混乱的样板代码。

While I've used JNI-C++ bridging in the past (only a little though) - it can be a bit ugly. You might want to consider using SWIG to help you generate all the messy boiler plate code.

贵在坚持 2024-12-14 06:59:03

如果JNI太复杂你可以看一下 JNA。在第一种情况下,您必须创建本机包装器代码(使用 C 或 C++)来连接 Java 和本机 (C++/C/...) 代码。在第二种情况下,它是在运行时完成的(因此您只需要 Java 代码 + 配置)。

If JNI is too complicated you can take a look at JNA. In first case you have to create native wrapper code (in C or C++) to join Java and native (C++/C/...) code. In second case it is done at runtime (so you only need Java code + config).

哭了丶谁疼 2024-12-14 06:59:03

我使用 JNR/FFI https://github.com/jnr/jnr-ffi 我有发现比 JNA 更快并且比 SWIG 更容易。我发现它的速度与 JNI 非常接近,但更不容易出错。

I use JNR/FFI https://github.com/jnr/jnr-ffi which I have found to be faster than JNA and easier than SWIG. It's as close to JNI for speed I have found but less error prone.

月野兔 2024-12-14 06:59:03

我以前用过JNA来做简单的接口,它足够简单和优雅。不过,建议如果有复杂的接口,那么最好使用 SWIG。

有一些很好的答案将 SWIG 与 JNI 和 JNA 进行了比较。虽然这个问题被问到已经有一段时间了。

SWIG 与 JNI 和 JNA

I have used JNA before for simple interfaces and it was simple and elegant enough. It is advised though, that if there is a complex interface then it's better to use SWIG.

There are some good answers that compare SWIG with JNI and JNA. It's a while since the question was asked though.

SWIG vs JNI and JNA

猫瑾少女 2024-12-14 06:59:03

JavaCPP - https://github.com/bytedeco/javacpp

它提供了对 Java 内部本机 C++ 的高效访问。在底层,它使用 JNI,因此它可以与 Java SE 的所有实现一起使用。

比 JNA/JNI 容易得多

JavaCPP - https://github.com/bytedeco/javacpp

It provides efficient access to native C++ inside Java. Under the hood, it uses JNI, so it works with all implementations of Java SE.

Much easier than JNA/JNI

空名 2024-12-14 06:59:03

从java程序中调用c++代码。

按照以下步骤操作

  1. 编写java代码
    • 原生方法的 contian 声明
    • 加载包含本机代码的共享库
    • 调用原生方法
public class Sample1 
{
     public native int intMethod(int n);
     public static void main(String[] args)
     {
          System.loadLibrary("Sample1");
          Sample1 sample = new Sample1();
          int     square = sample.intMethod(5);
          System.out.println("intMethod: " + square);
     }
}
  • 编译java代码
  • javac Sample2.java

  • 创建 C++ 头文件
  • javac Sample2.java

  • 编写 C++ 代码
  • #include "Sample1.h"
    #include <string.h>
    
    JNIEXPORT jint JNICALL Java_Sample1_intMethod
      (JNIEnv *env, jobject obj, jint num) {
       return num * num;
    }
    
    void main(){}
    
  • 编译c++代码
  • cc -G Sample1.c -o Sample1.so

  • 运行java程序
  • java Sample1

    Call c++ code from java program.

    Follow the below Step

    1. write java code
      • that contian declaration of native methods
      • load shared library contain native code
      • call native method
    public class Sample1 
    {
         public native int intMethod(int n);
         public static void main(String[] args)
         {
              System.loadLibrary("Sample1");
              Sample1 sample = new Sample1();
              int     square = sample.intMethod(5);
              System.out.println("intMethod: " + square);
         }
    }
    
    1. Compile java code

    javac Sample2.java

    1. create c++ header file

    javac Sample2.java

    1. Write c++ code
    #include "Sample1.h"
    #include <string.h>
    
    JNIEXPORT jint JNICALL Java_Sample1_intMethod
      (JNIEnv *env, jobject obj, jint num) {
       return num * num;
    }
    
    void main(){}
    
    1. compile c++ code

    cc -G Sample1.c -o Sample1.so

    1. Run java program

    java Sample1

    墨落成白 2024-12-14 06:59:03

    可以使用 JNA 代替 JNI 。

    您所需要的只是下载 JNA jar( https ://github.com/java-native-access/jna#download )应包含在您的 java 项目中。

    您需要在项目属性中提供 C++ 库的位置。

    • 右键单击项目
    • 运行
    • 在 VM 选项中包含此 -Djava.library.path="C:Your dll
      位置”

    请访问此站点获取示例,其中还包含 Java 和 C++ 项目的源代码,以了解其工作原理。( http://blog.mwrobel.eu/how-to-call-dll-methods-from-java/#a_downloads

    JNA can be used instead of JNI .

    All you need is to download JNA jar( https://github.com/java-native-access/jna#download ) Which should be included in your java project.

    You need to give the location of your c++ library in your project properties.

    • Right click project
    • Run
    • In VM options include this -Djava.library.path="C:Your dll
      location"
      .

    Visit this site for an example which also has a source code for Java and c++ project to know how this works. ( http://blog.mwrobel.eu/how-to-call-dll-methods-from-java/#a_downloads )

    对你的占有欲 2024-12-14 06:59:03

    如何从 Java 调用 C/C++ 函数,然后可以使用 Java 本机接口 (JNI),它是 Java 平台的一部分,是一个接口,支持在 Java 虚拟机 (JVM) 上运行的 Java 应用程序与本机应用程序或库之间进行通信用其他编程语言(例如C、C++)编写。您可以使用以下一些 URL 作为示例。

    http://malinsky.eu/blog/how-to -call-ac-function-from-java/
    https://www3.ntu.edu.sg/home/ ehchua/programming/java/JavaNativeInterface.html

    How to call a C/C++ function from Java then you can use Java Native Interface (JNI), part of the Java platform, is an interface that enables communication between Java applications running on a Java Virtual Machine (JVM) and native applications or libraries written in other programming languages (e.g. C, C++). You can use some below URLs for as examples.

    http://malinsky.eu/blog/how-to-call-a-c-function-from-java/
    https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

    ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文