我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mac下用Java调用c/c++的思路详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mac下用Java调用c/c++的思路详解

前言

向量化执行逐渐成为了列存数据库优化的热门方向,而Java对向量化执行的支持并不如c++,如果要想使用的话,通过JNI来实现可能更加合适。

调用思路

Java

  1. 编写native的java方法并编译为class文件
  2. 编译为.h的头文件

C/C++

  1.  使用C/C++实现本地方法
  2. 将本地方法生成动态链接库

具体步骤

Java

1.编写native的java方法并编译为class文件

这步是Java初学者都熟悉的,正常编写编译即可


public class HelloWorld {

    public native void hello();

    static {
        //设置查找路径为当前项目路径
        System.setProperty("java.library.path", ".");
        //加载动态库的名称
        System.loadLibrary("hello");
    }

    public static void main(String[] args) {
        new HelloWorld().hello();
    }
}

javac HelloWorld.java生成HelloWorld.class 文件

javac找不到的话,写绝对路径或者添加环境变量

2.编译为.h的头文件javah HelloWorld生成HelloWorld.h
native的方法需要通过头文件和c++的实现方法关联上

在这里插入图片描述 

C/C++

编写native方法的实现方法


#include "jni.h"
#include "HelloWorld.h" // 将生成的头文件引入
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
	//函数签名需和头文件中的相对应
    printf("Hello World!\n");
    return;
}

根据文件生成动态链接库


#/bin/bash
export JAVA_HOME=`/usr/libexec/java_home`
echo $JAVA_HOME
gcc -dynamiclib -I $JAVA_HOME/include -I $JAVA_HOME/include/darwin HelloWorldImpl.c -o libhello.jnilib

最后就可以正常运行Java代码了

运行失败了的话,注意检查Java的代码中是否加载了连接库

在这里插入图片描述

到此这篇关于Mac下用Java调用c/c++的方法的文章就介绍到这了,更多相关Java调用c/c++内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mac下用Java调用c/c++的思路详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mac下如何使用Java调用c/c++

小编给大家分享一下Mac下如何使用Java调用c/c++,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言向量化执行逐渐成为了列存数据库优化的热门方向,而Java
2023-06-20

详解QML 调用 C++ 中的内容

这篇文章主要介绍了QML 怎么调用 C++ 中的内容,这里主要是总结一下,怎么在QML文件中引用C++文件里定义的内容,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

Android JNI c/c++调用java的实例

Android JNI c/c++调用java的实例近期通过研究SDL源码 得出Android JNI c/c++调用Java 无需新建虚拟机,这样省去很多步骤,这样调用Android JNI会变得非常容易,大家看下简单实例:具体步骤如下
2023-05-31

C和C++如何实现互相调用详解

在学习c++中用到一些古老的c语言库时,在工作中我们经常要使用C和C++混合编程,下面这篇文章主要给大家介绍了关于C和C++如何实现互相调用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-01-10

Python调用C++程序的方法详解

前言 大家都知道Python的优点是开发效率高,使用方便,C++则是运行效率高,这两者可以相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目中用Python实现外围功能,都可能遇到Python调用C++模块的需求,下面列举
2022-06-04

C++ 内联函数的调用机制详解

内联函数在编译时展开,消除函数调用开销,提升性能。1. 调用机制:编译器将内联函数代码直接插入调用位置,无需函数调用机制。2. 实战案例:游戏开发等场景需要快速计算时使用内联函数。3. 限制:不得包含复杂结构,过度使用可能增加代码大小。C+
C++ 内联函数的调用机制详解
2024-04-29

C语言三子棋的实现思路到过程详解

所谓三子棋,就是三行三列的棋盘,玩家可以和电脑下棋,率先连成三个的获胜。这篇文章主要为大家详细介绍了如何通过C语言实现三子棋小游戏,感兴趣的小伙伴可以尝试一下
2023-02-13

C语言函数调用基础应用详解

函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码。这篇文章主要介绍了c语言是如何处理函数调用的?需要的朋友可以参考下
2023-02-11

JNI实现最简单的JAVA调用C/C++代码

JNI,是Java Native Interface的简称,中文是“Java本地调用”。通过这种技术可以做到以下两点: Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。 Native程序
2023-05-31

详解python如何调用C/C++底层库与互相传值

前言开发环境:Centos 7 + Python 3.5.1 + Qt Creator(只是使用Qt Creator编译而已,并没有使用QT的任何库) Python调用C/C++库,我现在能做到的有两种方式 1.extern “C” 导出(
2022-06-04

ubuntu中python调用C/C++方法之动态链接库详解

安装booJlLUslVOSstpython调用C/C++的方法有很多,本文使用boost.python。考虑到后期有好多在boost上的开发工作,所以boost一并安装了,Boost库分为两个部分来使用,一是直接使用对应的头文件,二是需要
2022-06-04

C++实现与Lua相互调用的示例详解

这篇文章主要为大家详细介绍了C++实现与Lua相互调用的方法,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
2023-05-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录