C、C++打包成.dll .so .a 给Unity使用
C、C++打包成.dll .so .a 给Unity使用
打包.dll库
工具:VS
- 使用VS新建项目
- 选择不大于.NET3.5的版本
- 选择Visual C++ -> Win32 控制台应用程序
- 输入项目名(dll名字)
- 下一步
- 勾选dll->勾选空项目
测试代码test.c
#include <stdio.h>//引入C的库函数
#include "test.h" //引入头文件
int add(int a, int b)
{
return a + b;
}
头文件代码test.h
#ifndef _DLL_TEST_
#define _DLL_TEST_
#if 1
#define EXPORT_DLL __declspec(dllexport) //导出dll声明
#else
#define EXPORT_DLL extern//导出so .a 不需要加声明
#endif
#pragma once
EXPORT_DLL int add(int a, int b);
#endif
test.c放入源文件
test.h放入头文件
选着X64框架
点击生成解决方案
在输出日志查看生成dll路径
复制生成的dll到Unity的Plugins路径
打包.SO库
工具NDK
- 配置NDK环境
- 测试代码用上面
- 修改test.c代码中的 编译宏
#ifndef _DLL_TEST_
#define _DLL_TEST_
#if 0//这里
#define EXPORT_DLL __declspec(dllexport) //导出dll声明
#else
#define EXPORT_DLL extern//导出so .a 不需要加声明
#endif
#pragma once
EXPORT_DLL int add(int a, int b);
#endif
- test.c目录 新建文件Android.mk和Application.mk
Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := zq
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := test.c
LOCAL_LDLIBS := -llog -landroid
LOCAL_CFLAGS := -DANDROID_NDK
include $(BUILD_SHARED_LIBRARY)
Application.mk文件
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -std=c++11
APP_PLATFORM := android-19
APP_CFLAGS += -Wno-error=format-security
APP_BUILD_SCRIPT := Android.mk
APP_ABI := armeabi-v7a x86
- 使用cmd命令CD到test.c目录
- 运行命令
ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk
- 复制生成的libs文件到Unity的Plugins/Andriod路径
- 在Unity中选中SO文件修改属性
打包.a库
工具xcode
- 新建静态库工程
- Create a New Xcode project -> Framework&Library -> Cocoa Touch Static Library
- 配置最低支持版本
- 选中项目 选中info 选中Deployment Target 修改版本
- 配置适配所有模拟器架构
- project buildSeting Build Active Architecture Only 设为NO
- 添加代码
- 使用生成SO文件的代码
- 添加公开文件
- 选中项目 选中Build Phasses 选中+图标 选中New Headers Phase 选中New Headers Phase+图表 添加头文件 拖入Pulic栏
- 生成文件
- 复制到unity的Plugins/IOS路径
测试代码
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
public class NewBehaviourScript : MonoBehaviour
{
#if UNITY_IPHONE && !UNITY_EDITOR
const string dllName = "__Internal";
#else
const string dllName = "zq";
#endif
[DllImport(dllName)]
private static extern int add(int x, int y);
void Start()
{
Debug.Log("zqzqzqzq " + add(111, 111));
}
}
相关链接
https://blog.csdn.net/l773575310/article/details/72461579
https://blog.csdn.net/yangxuan0261/article/details/52420833
https://blog.csdn.net/u014361280/article/details/80693368
C、C++打包成.dll .so .a 给Unity使用的更多相关文章
- unity3d将C#打包成dll方法
方法一:用vs新建工程-C#库,添加UnityEngine.dll引用,注意.netframwork选3.5,编译C#脚本得到dll: 方法二:使用mono的mcs,具体如下 c#提供了dll打包,但 ...
- 将halcon导出的c++程序打包成dll库
1.从“文件”菜单中,选择“新建”,然后选择“项目…”. 2.从“项目类型”窗格中选择“Visual C++”下的“Win32”. 3.从“模板”窗格中,选择“Win32 控制台应用程序”. 4.为 ...
- JAVA的class打包成dll
一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . //注意这 ...
- asp.net core2.0中网站发布的时候,视图文件不被打包成dll
项目csproj文件里面加 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <Target ...
- Unity中资源打包成Assetsbundle的资料整理
最近在研究Unity中关于资源打包的东西,网上看了一堆资料,这里做个整合,说整合,其实也就是Ctrl-C + Ctrl-V,不是原创 首先为了尊重原创,先贴出原创者的文章地址: http://blog ...
- java中调用本地动态链接库(*.DLL)的两种方式详解和not found library、打包成jar,war包dll无法加载等等问题解决办法
我们经常会遇到需要java调用c++的案例,这里就java调用DLL本地动态链接库两种方式,和加载过程中遇到的问题进行详细介绍 1.通过System.loadLibrary("dll名称,不 ...
- winform把所有dll打包成一个exe
大家都知道做winform开发,是可以利用visual studio进行打包的,但是这种打包的方式需要双击安装,那么有没有什么方法,可以把winform程序打包成绿色版呢?当然,这里的“绿色版”也是相 ...
- 用node-webkit把web应用打包成桌面应用
node-webkit是一个Chromium和node.js上的结合体,通过它我们可以把建立在chrome浏览器和node.js上的web应用打包成桌面应用,而且还可以跨平台的哦.很显然比起传统的桌面 ...
- python程序打包成.exe----pyinstaller工具
1. 环境 windows 2. 安装 准备文件:PyWin32 or pypiwin32 运行如下安装命令: pip install pyinstaller==3.0 不要使用3.2版本,编译完成 ...
随机推荐
- Codeforces 1086 简要题解
文章目录 A题 B题 C题 D题 E题 传送门 这场比赛原地爆炸了啊!!! 只做了两道. A题 传送门 手贱没关freopenfreopenfreopen于是wawawa了一次,死活调不出错. 题意: ...
- 2018.10.25 uestc上天的卿学姐(计数dp)
传送门 看了DZYODZYODZYO的题解之后发现自己又sbsbsb了啊. 直接dpdpdp是O(2d)O(2^d)O(2d)更新,O(1)O(1)O(1)查询或者O(1)O(1)O(1)更新,O(2 ...
- 深度优先搜索DFS和广度优先搜索BFS
DFS简介 深度优先搜索,一般会设置一个数组visited记录每个顶点的访问状态,初始状态图中所有顶点均未被访问,从某个未被访问过的顶点开始按照某个原则一直往深处访问,访问的过程中随时更新数组visi ...
- acitvemq的jvm监控
在conf/activemq.xml启用jmx监控 即在broker后面添加useJmx="true"配置参数 <managementContext> <mana ...
- vue的cli中自定义router
1.安装router npm install vue-router 2.为了方便管理在components同级创建router文件夹 3.在文件夹中创建index.js文件,就是router文件 im ...
- SpringBoot初探
一:项目创建 个人用的是IDEA来做Demo的: 1.先创建一个空项目,然后创建一个基于Maven的java application项目: 2.创建好后配置pom.xml文件并最终reimport & ...
- Typecho 插件开发基础
<?php /** * 标题 插件说明 * * @package 添加标题 * @author Fan * @version 1.0.0 * @link http://cnblogs.com/f ...
- 利用putty在window下控制linux的terminal、ftp传输
google搜索putty,可能要FQ才能进入官方网站下载. 首先将虚拟机下的linux的网络适配器设置成桥接模式,并且将linux系统的firewall和iptables(防火墙关闭). firew ...
- 周鸿祎与85后的座谈(一):人人需要Mentor,世界没有奇迹
我们公司现在有将近 4000 人,我觉得里面肯定是卧虎藏龙.百里挑一的话,也有 40 个伟大的人才.但是,即使是天才,如果没有前辈的帮助,最后也会变成庸才,是做不出什么大事的.举例来说,每一个跳水冠军 ...
- 谈谈HashMap线程不安全的体现
原文出处: Hosee HashMap的原理以及如何实现,之前在JDK7与JDK8中HashMap的实现中已经说明了. 那么,为什么说HashMap是线程不安全的呢?它在多线程环境下,会发生什么情况呢 ...