当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

JavaCPP

Java 访问 C++ 方法
授权协议 Apache
开发语言 Java C/C++
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 不详
投 递 者 戎泰
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

JavaCPP提供了在Java中高效访问本地C++的方法。采用JNI技术实现,支持所有Java实现包括Android系统,AvianRoboVM

JavaCPP提供了一系列的Annotation将Java代码映射到C++代码,并使用一个可执行的jar包将C++代码转化为可以从JVM内调用的动态链接库文件。

Maven:

<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacpp</artifactId>
    <version>0.11</version>
</dependency>

使用方法:

C++:

#include <string>

namespace LegacyLibrary {
    class LegacyClass {
        public:
            const std::string& get_property() { return property; }
            void set_property(const std::string& property) { this->property = property; }
            std::string property;
    };
}

Java:

import org.bytedeco.javacpp.*;
import org.bytedeco.javacpp.annotation.*;

@Platform(include="LegacyLibrary.h")
@Namespace("LegacyLibrary")
public class LegacyLibrary {
    public static class LegacyClass extends Pointer {
        static { Loader.load(); }
        public LegacyClass() { allocate(); }
        private native void allocate();

        // to call the getter and setter functions 
        public native @StdString String get_property(); public native void set_property(String property);

        // to access the member variable directly
        public native @StdString String property();     public native void property(String property);
    }

    public static void main(String[] args) {
        // Pointer objects allocated in Java get deallocated once they become unreachable,
        // but C++ destructors can still be called in a timely fashion with Pointer.deallocate()
        LegacyClass l = new LegacyClass();
        l.set_property("Hello World!");
        System.out.println(l.property());
    }
}
  • JNA实际上是基于JNI封装的,其在应用的时候更加方便,但效率相对低,主要适合对实时性要求不高的场合。JNI虽然效率高,但是应用不方便。JavaCPP提供了在Java中高效访问本地C++的方法。采用JNI技术实现,支持包括Android系统在内的所有Java实现。 在本例中,DLL源代码进行了一些修改,用一个TAdd.h表示所有代码,更加简单了: namespace TAdd {

  • 本文旨在帮助理解JavaCV, JavaCPP,和JavaCPP Presets之间的关系   JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了ffmpeg、OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口,可以通过其中的utility类方便的在包括Android在内的Java平台上调用这

  • xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 org.bytedeco javacpp-presets 1.5.6-SNAPSHOT pom JavaCPP Presets The missing bridge between Java a

  • https://github.com/bytedeco/javacpp#introduction https://github.com/bytedeco/javacpp-presets —————————————————————————————————————————————————————————————————————————————————— Introduction JavaCPP pro

  • 1. Java 与 FFMPEG FFMPEG 是一个广泛用于媒体处理的库,在Java的世界里,处理视频的能力相当弱,于是有很大需求需要Java 调用 FFMPEG。   Java 调用C 的方式有很多,可以用最原始的JNI方式,也可以JNA方式,还可以是命令行。 采用命令行的方式比较简单,不过有很大局限性,尤其是涉及到 视频的处理和分析的时候,比如要取出某个packet,然后进行处理。 这里介绍

  • 文件名大小更新时间 javacpp02018-01-15 javacpp\src02014-12-24 javacpp\src\test02015-08-01 javacpp\src\test\resources02015-08-01 javacpp\src\test\resources\org02015-08-01 javacpp\src\test\resources\org\bytedeco0

  • 配置liunx 环境系统 配置so 文件存放路径 [root@arch2 ~]# cat /etc/ld.so.conf.d/so.conf /opt/app/tools/so/ 从新调用ldconfig 命令 ldconfig 配置java 项目 配置pom 文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

  • ?这个东西也太神了吧,一键生成java文件,自己写好c++和配置类就行了。 然后另一个需求是c++三方库,比如<eigen>啥的,这种东西也可以直接加在include path里,感觉无敌了。 首先我们写一个配置类 import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; import org.bytedeco

  • 我只想测试JAVACPP并尝试从我的eclipse中的网页开始的第一个例子: 我输入时: javac -cp libs \ javacpp.jar: . SRC \ LegacyLibrary.java 进入命令行我收到以下错误信息: src \ LegacyLibrary.java:1:错误:包com.googlecode.javacpp不存在import com.googlecode.java

 相关资料
  • 本文向大家介绍C# httpwebrequest访问HTTPS错误处理方法,包括了C# httpwebrequest访问HTTPS错误处理方法的使用技巧和注意事项,需要的朋友参考一下 C# httpwebrequest访问HTTPS链接时遇到这个错误,但是如果我开抓包工具,比如filddler2,则POST返回正常 错误提示的Message为: 基础连接已经关闭: 发送时发生错误。 InnerEx

  • 本文向大家介绍浅析C++中boost.variant的几种访问方法,包括了浅析C++中boost.variant的几种访问方法的使用技巧和注意事项,需要的朋友参考一下 Boost.Variant Variant库包含一个不同于union的泛型类,用于在存储和操作来自于不同类型的对象。这个库的一个特点是支持类型安全的访问,减少了不同数据类型的类型转换代码的共同问题。 Variant 库如何改进你的程

  • 本文向大家介绍C#访问SQL Server数据库的实现方法,包括了C#访问SQL Server数据库的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#访问SQL Server数据库的实现方法。分享给大家供大家参考。具体如下: 这里介绍一下用C#访问SQL Server数据库。这里要涉及到几个类:SqlConnection类、SqlCommand类、SqlDataReader类。

  • 模式定义 表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。 class Visitor; class Element { public: virtual void accept(Visitor& visitor) = 0; //第一次多态辨析 virtual ~Element() {} }; class Eleme

  • 在上一节中,我们已经看到当目标用户重新启动计算机时,我们就会失去连接。我们使用了一个普通的后门程序,这就是为什么当计算机重新启动时,后门程序将被终止,进程将被终止,我们将失去连接。但在本节中,我们将讨论如何维持对目标计算机的访问的方法。我们将使用之前创建的普通HTTP反向Mterepreter不可检测的后门。将它作为一项服务注入,以便每次目标用户运行他们的计算机时它都会运行,它会尝试以一定的间隔连

  • 主要内容:直接访问,索引访问文件访问方法 看看访问存储在辅助存储器中的文件的各种方法。 顺序访问 大多数操作系统按顺序访问文件。 换句话说,可以说大多数文件需要由操作系统按顺序访问。 在顺序访问中,操作系统逐字读取文件。 维护一个指针,该指针最初指向文件的基地址。 如果用户想要读取文件的第一个字,那么指针将该字提供给用户并将其值增加1个字。 这个过程一直持续到文件结束。 现代文字系统确实提供了直接访问和索引访问的概念,但最常

  • 问题内容: 只是一个简单的问题:是否可以从c / c ++调用Java函数? 问题答案: 是的,你可以,但是它有点令人费解,并且以反射/非类型安全的方式工作(示例使用的C ++ API比C版本更干净)。在这种情况下,它将从C代码中创建Java VM的实例。如果首先从Java调用你的本机调用,则无需构造VM实例 编译(在Ubuntu上): 注意:为了实现正确的错误处理,应检查每种方法的返回代码(为方

  • 问题内容: 我试图访问C中的击键。我可以访问字母数字键。如何访问,并重点? 另外,我读过某个地方,有时在控制台中输入文本时,操作系统会掩盖退格键。我想知道用户在哪里按退格键。这与知道何时按下’\ n’并不相同。GNU C.Ubuntu 11。 问题答案: Dietrich Epp在评论中回答:使用 ncurses 库。 您可能会制作一个X11客户端图形应用程序;在这种情况下,请使用图形工具包库,例