C、C++打包成.dll .so .a 给Unity使用

打包.dll库

工具:VS

  1. 使用VS新建项目
  2. 选择不大于.NET3.5的版本
  3. 选择Visual C++ -> Win32 控制台应用程序
  4. 输入项目名(dll名字)
  5. 下一步
  6. 勾选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使用的更多相关文章

  1. unity3d将C#打包成dll方法

    方法一:用vs新建工程-C#库,添加UnityEngine.dll引用,注意.netframwork选3.5,编译C#脚本得到dll: 方法二:使用mono的mcs,具体如下 c#提供了dll打包,但 ...

  2. 将halcon导出的c++程序打包成dll库

     1.从“文件”菜单中,选择“新建”,然后选择“项目…”. 2.从“项目类型”窗格中选择“Visual C++”下的“Win32”. 3.从“模板”窗格中,选择“Win32 控制台应用程序”. 4.为 ...

  3. JAVA的class打包成dll

    一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . //注意这 ...

  4. asp.net core2.0中网站发布的时候,视图文件不被打包成dll

    项目csproj文件里面加 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <Target ...

  5. Unity中资源打包成Assetsbundle的资料整理

    最近在研究Unity中关于资源打包的东西,网上看了一堆资料,这里做个整合,说整合,其实也就是Ctrl-C + Ctrl-V,不是原创 首先为了尊重原创,先贴出原创者的文章地址: http://blog ...

  6. java中调用本地动态链接库(*.DLL)的两种方式详解和not found library、打包成jar,war包dll无法加载等等问题解决办法

    我们经常会遇到需要java调用c++的案例,这里就java调用DLL本地动态链接库两种方式,和加载过程中遇到的问题进行详细介绍 1.通过System.loadLibrary("dll名称,不 ...

  7. winform把所有dll打包成一个exe

    大家都知道做winform开发,是可以利用visual studio进行打包的,但是这种打包的方式需要双击安装,那么有没有什么方法,可以把winform程序打包成绿色版呢?当然,这里的“绿色版”也是相 ...

  8. 用node-webkit把web应用打包成桌面应用

    node-webkit是一个Chromium和node.js上的结合体,通过它我们可以把建立在chrome浏览器和node.js上的web应用打包成桌面应用,而且还可以跨平台的哦.很显然比起传统的桌面 ...

  9. python程序打包成.exe----pyinstaller工具

    1. 环境 windows 2. 安装 准备文件:PyWin32 or pypiwin32 运行如下安装命令:  pip install pyinstaller==3.0 不要使用3.2版本,编译完成 ...

随机推荐

  1. 2018.11.06 bzoj2287: 【POJ Challenge】消失之物(背包)

    传送门 先假设所有物品都能用,做01背包求出方案数. 然后枚举每个点,分类讨论扣掉它对答案的贡献. 代码: #include<bits/stdc++.h> using namespace ...

  2. SELECT INTO创建临时表

    SELECT INTO创建临时表 SQL Server临时表有两种类型:本地和全局.它们在名称.可见性以及可用性上有区别.本地临时表的名称以单个数字符号 (#) 打头:它们仅对当前的用户连接是可见的: ...

  3. C/C++中static,const,inline三种关键字详细总结

    一.关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因.作用谈起,全面分析static 修饰符的实质. static ...

  4. java常用设计模式三:原型模式

    在说原型模式之前先说一下浅拷贝和深拷贝的概念 一.浅拷贝和深拷贝 1.浅拷贝 在java中,对象创建后需要有一个引用变量来指向该对象实际的地址空间,也就是说引用变量与对象实体是两个不同的数据体.在Ob ...

  5. c# devexpress绘图 三角函数

    加标题: using System; using System.Windows.Forms; using DevExpress.XtraCharts; // ... namespace SideByS ...

  6. centos6上安装jenkins

    一.安装jdk 1.下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  7. C++编译器详解(二)常见precompiling 指令介绍

    VC++编译器中一些常见precompiling 指令介绍 我们在利用vc6.0 project wizard生成的代码中,经常看到大量的precompiling指令.本文讲解了常见的这些指令的作用 ...

  8. 基于udp协议的套接字,socketserver模块,多道技术,进程理论

    进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念 进程vs程序 程序:一堆的代码 进程:程序执行的过程 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统的其他所有 ...

  9. noip第21课作业

    1. 遍历二叉树 [问题描述] 以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树: 输出其中序序列和后序序列,其中总结点个数不超过100. 输 ...

  10. Xcode常见快捷键

    在项目工作中,你每天都要和这些视图互动,所有这些视图在Xode中都是必不可少的.所以接下来江哥将教你如何快速通过热键来配置你的工作空间. Command (⌘):用来导航,主要用来控制导航区域. Al ...