Mac M1 Xcode创建动态链接库dylib(c++)——JNA-JNI(三)

2023-10-29

Mac M1 Xcode创建动态链接库dylib(c++)——JNA-JNI(三)

系列文章:
Java通过JNI调用C++动态链接库dll,并打在jar包内 ——JNA-JNI(一)
Java使用JNA调用C++动态链接库——JNA-JNI(二)
Mac M1 Xcode创建动态链接库dylib(c++)——JNA-JNI(三)
JNA调用dll(c++)附带解析xml——JNA-JNI(四)
JNA参数类型转换(含接收、发送结构体)——JNA-JNI(五)

创建项目

  • Mac版本,选择macOS,选择Library,然后选择Next

  • Type选择Dynamic,Framework选择C/C++ Library,因为C++代码能够让C#调用,就需要将C++代码外面包一层C语言接口

  • 项目储存的位置(默认),不创建git

创建文件

  • 项目右键,选择New File…

  • C++文件,勾选Also create a header file生成相应的头文件(.hpp)

  • 勾选相应的Targets,不然生成的.dylib文件不会包含相应的代码,默认是选中的

  • 创建好之后,可以通过ARGETS–>Build Phases界面检测上一步的Target有没有勾选成功,如果未如图显示,也可以在这个界面手动设置。

编辑代码

代码头文件(.hpp)

#ifndef MacSDK_hpp
#define MacSDK_hpp
#define _DllExport _declspec(dllexport) //使用宏定义缩写下

#pragma once
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>

extern "C"
{
   float GetDistance(float x1, float y1, float x2, float y2);
}

#endif /* MacSDK_hpp */

代码(.cpp)

#include "MacSDK.hpp"

float GetDistance(float x1, float y1, float x2, float y2)
{
     return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}

生成.dylib

  • 将需要外放的代码头文件拖拽到Public栏下

  • 点击Build生成

输出位置

.dylib文件的输出位置:Users/xxx/资源库/Developer–>Xcode–>DeriveData–>对应项目的文件–>Build–>Products–>Debug

与.dylib文件同级的文件夹中usr–>local–>include,就是上面设置的Public栏下的头文件(.hpp)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac M1 Xcode创建动态链接库dylib(c++)——JNA-JNI(三) 的相关文章

  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大

随机推荐

  • 用python来做regression 图

    我们直接上代码了 之前已经介绍了如何导入表格了 现在就用表格中的数据来进行画图 还是用之前的表格 import pandas as pd import matplotlib pyplot as plt data pd read csv 1
  • ChatGPT如何应用于代码注释和文档自动生成?

    作为一名Java高级软件开发专家 我们在平时的工作中经常会遇到需要撰写代码注释和文档的情况 为了提高编码效率和代码质量 越来越多的开发人员开始探索使用自然语言处理技术 如ChatGPT 来自动生成代码注释和文档 本文将介绍如何将ChatGP
  • x轴z轴代表的方向图片_数控机床的X,Y,Z轴分别指什么方向的运动

    展开全部 标准坐标系的规定 标准坐标系是一个直角坐标系 如图所示 按右手e69da5e887aa3231313335323631343130323136353331333366303836直角坐标系规定 右手的拇指 食指和中指分别代表X Y
  • 关于Ionic2\Angular2使用http的一些坑

    1 服务器接收key value key value类型的值 但服务器无法获取到Post请求的body的值 描述 使用url key value key value的形式可以正常请求到参数 但是把参数放入到body后 服务器估计获取到信息但
  • Kotlin项目类找不到bug:java.lang.ClassNotFoundException: kotlin.reflect.Kotlin Reflect Internal Error

    一 今天在创建了一个Kotlin Spring的项目 结果启动报错 org springframework context ApplicationContextException Unable to start web server nes
  • Python - selenium自动化-Chrome(wap模式)

    Selenium Chrome浏览器如何模拟手机操作 进入手机模式 打开谷歌浏览器 按F12 进入开发者模式 点击Toggle device toolbar 进入手机模式 设置Chrome的手机模式 deviceName可更改成Chrome
  • 人工智能 机器学习实验总结

    答案仅供参考 1 数据预处理 给定数据集datingTest 实验任务 读取DatingTest的数据文件 1 并输出第一列数据的最大 最小和均值 2 输出该文件有多少数据 3 计算第一条数据和第二条数据的欧式距离 import panda
  • 面试题 v-if跟v-show的区别

    v if v show 区别 展示形式不同 v if是 创建一个dom节点 V show 是 display none block 使用场景不同 初次加载 v if 要 比v show 好 页面不会做加载盒子 频繁切换 v show 要比
  • JDK8新特性(七)之Stream流的count()、filter()、limit()、skip()方法

    1 Stream流的count 方法 Stream流提供count方法来统计其中的元素格式 long count 该方法返回一个long值代表元素个数 基本使用 import java util ArrayList import java
  • cmake

    cmake的常用命令 cmake minimum required message project set add executable add compile options add subdirectory add library ta
  • python -- 替换netcdf文件中的时间

    最近 在处理nc文件时 在时间上存在部分缺失的数据 为了避免影响后续操作 这里通过复制前一时刻的nc数据进行替代 但是虽然缺失时刻的数据得到了填充 但是填充的数据的时间属性本质上仍然是前一时刻的 为了保证时间的一致性 这里通过一个更新时间的
  • ARM(IMX6U)裸机C语言蜂鸣器驱动实验(BSP+SDK)

    参考 Linux之ARM IMX6U 裸机C语言蜂鸣器驱动实验 驱动编写 编译 作者 一只青木呀 发布时间 2020 08 16 14 47 23 网址 https blog csdn net weixin 45309916 article
  • android adb常用指令

    Android 调试桥 adb 是多种用途的工具 该工具可以帮助你你管理设备或模拟器 的状态 可以通过下列几种方法加入adb 在设备上运行shell命令 通过端口转发来管理模拟器或设备 从模拟器或设备上拷贝来或拷贝走文件 下面对adb进行了
  • C++数组的正确释放方式

    include
  • mariadb日志报错:error while loading shared libraries: libjemalloc.so.2处理办法

    Linux下找不到so文件的解决办法 rznice 2016 03 11 16 39 27 19494 收藏 1 分类专栏 linux 版权 最近在安装完tengine 在启动tengine时报找不到libjemalloc so 2的提示
  • # Odoo丨Odoo框架源码研读一:前后端交互

    Odoo丨Odoo框架源码研读一 前后端交互 本期内容 Odoo框架源码研读之 前后端交互 Odoo框架是一款企业应用快速开发平台 适用于各种规模的企业应用 安装与使用十分广泛 Odoo框架源码的第一篇研读内容 前后端交互 源码文件结构 O
  • 浅析Python中“if __name__ == __main__”的意义

    首先可以用一句话概括 if name main 语句的意义是为了使当前脚本可以正常执行 在被其他脚本调用时也可以执行 举个栗子 print py 文件中的代码如下 print the first if name main print the
  • uniapp 子组件向父组件传值

    使用组件可以减少代码的重复率 提高写代码的效率 改起来也方便 最近在使用uni app做项目 一套代码多端实现 做些简单的项目还是可以的 废话少说 说说子组件向父组件传值 子组件获取到值的时候 使用 emit传给父组件 this emit
  • c++函数为什么带imp_二次函数含参最值问题,老师怎么讲学生都不明白,试试这九张动图...

    一入函数深似海 从此数学是路人 很多同学都有这样的感觉 问 数学是从什么开始听不懂了 答 学函数的时候 函数问题作为中学阶段数学重要的知识点 真的是难倒了很多同学 数学老师也非常的痛苦 每次讲完函数问题 看到大家一脸茫然的表情 都会狠狠心再
  • Mac M1 Xcode创建动态链接库dylib(c++)——JNA-JNI(三)

    Mac M1 Xcode创建动态链接库dylib c JNA JNI 三 系列文章 Java通过JNI调用C 动态链接库dll 并打在jar包内 JNA JNI 一 Java使用JNA调用C 动态链接库 JNA JNI 二 Mac M1 X