iOS 静态类库 打包 C,C++文件及和OC混编
iOS 静态类库 编译 C,C++
我们都知道,OC 原生支持C, 在 创建的 OC类的 .m 里面,可以直接编写C的代码;
同样 Xcode 也支持 OC ,C++的混编,此时,我们通常把OC创建的 .m 文件,手动修改为 .mm 文件以支持 oc c++的混编
基于上面的特性,我们在打包静态类时,可以编译C,OC,C++ 以及三者混合的代码;
因为大多数夸平台的算法库代码都是C或是C++写的,我们利用Xcode编译成静态类库,可以非常安全的提供给别人使用
如下示例:
一:静态库打包 C 代码
1. Xcode 创建一个 静态类库项目,就是Cocoa Touch Static Library;
2. 创建好项目之后,File new,C file, 创建一个 A.c 文件;
在 A.c 里面,写一个测试代码,假如 hello() 方法,是咱们的核心代码,不想让别人知道,只想给外界提供一个 方法名;hello()
void hello(void)
{
printf("hello world!");
}
这时,我们可以再接着 创建一个 Header File ,命名为 A.h, 在该文件里面,写上
void hello(void);
上面 .c 文件的 方法名,即可;然后在 静态类库的选项里面,,把 .c 添加到 编译里面,把 .h 添加到 输出里面;
这样,别人在拿到打包的 .a 之后,再配置头文件,,即可使用 hello() 方法;而不用 担心会暴露 hello()的内部实现;
注意:在使用该静态库的时候,不要用 .mm , 用 .m ;因为此编译的是C方法,OC 原生支持C;
二:静态类库打包 C++ 代码
1. Xcode 创建一个 静态类库项目,就是Cocoa Touch Static Library;
2. New File 创建一个 C++ Class, 此时项目里面,会生成名为 A.cpp 和 A.h ;
可以看到 以后 C++ 代码,方法的声明 放到 A.h 里面,,方法的实现 放到 A.cpp 里面,实现即可;
在给别人打包提供时,同样把 cpp 放到编译里面,把.h 放到 输出里面,即可;
如 我们在 A.h 里面同样放上 一个 c的 测试 hello(); 方法声明
void hello(void);
在 A.cpp 里面,写上方法的实现
void hello(void)
{
printf("hello world");
}
打包编译,在使用的时候,我们就要用 .mm 了,而不能用 .m了,,
虽然这两种方式写的同样的是 C的方法,但是意义不一样了;上面编译的是纯C,而下面的,虽然写的是c代码,但是编译的是C++;
所以在调用此包时,要用 OC,C++混纺,即 .mm 文件;
三:总结注意
1. 如果编译纯C,.c文件, 用 .m 即是 OC,C混编;
2. 如果编译C++,.cpp文件,用 .mm 即是 OC C++混编;
3. .cpp的文件里面,可以调用写的 .c 文件,用 .mm 即 OC,C,C++混编;
iOS 静态类库 打包 C,C++文件及和OC混编的更多相关文章
- iOS 静态类库项目的建立与使用
iOS 静态类库项目的建立与使用 新建 Xcode workspace 打开 Xcode , 选择 File -> New -> Workspace , 将 Workspace 命名为 ...
- iOS之 C++与oc混编
声明:本文只是随笔,自己做个笔记方便以后查阅如要转载,注明出处.谢谢! 2016年第一篇随笔!!! 由于最近要搞一个项目用到c++的一些api所以要混编,于是就记录下这个过程中的一些细节上的东西! O ...
- iOS静态库打包
当了三年多程序员,第一次写随便,说来有些惭愧.想成为一个优秀的程序员,分析,思考,总结并且做记录是必不可少的,今天先从简单的命令总结记起.好了,废话不多说了,Let's start our games ...
- iOS开发之swift与OC混编出现的坑,oc中不能对swift的代理进行调用,不能访问swift中的代理,swift中的回调方法
1. Swift与oc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解. 2. 在swift与OC混编的编译环境下, oc类不能访问swift创建类中的代理? 解决方法如下: 在代理的头部 ...
- iOS开发--Swift 如何完成工程中Swift和OC的混编桥接(Cocoapods同样适用)
由于SDK现在大部分都是OC版本, 所以假如你是一名主要以Swift语言进行开发的开发者, 就要面临如何让OC和Swift兼容在一个工程中, 如果你没有进行过这样的操作, 会感觉异常的茫然, 不用担心 ...
- IOS --- OC与Swift混编
swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. ...
- 【转】IOS --- OC与Swift混编
群里大神发的网址,感觉有用就先收录了,暂时没时间看SWIFT,感觉代码简洁,但是可阅读性不是太高,有些代码让系统去判断类型,同样的,我们看代码的时候也得自己去判断类型,或许看多就习惯了,有时间再说吧, ...
- iOS开发——路径篇&混编路径与全局宏路径
混编路径与全局宏路径 最近在做东西的时候有一个地方要用到一个第三方库的,但是目前swift版的还没有找到,自己又不想写(其实是不会写),所以就想到了混编,但是中间出现了好多问题,其中印象最深的就是桥接 ...
- iOS开发--混编篇&swift与OC混合使用
Swift与OC混合使用 swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编. ...
随机推荐
- python学习笔记三 函数(基础篇)
函数 内置函数 常用的内建函数: type() 列出指定对象的类型 help() 能够提供详细的帮助信息 dir() 将对象的所有特性列出 vars() 列出当前模块的所有变量 file, ...
- PostGIS_导入shp格式的数据
1.导入shp到PostGIS 开启PostGIS shp Loader,如下图: 打开View connection details....输入连接数据库的参数,如下: 连接成功后,点击Add Fi ...
- DEBUG模式开关
在.NET中,有一个特殊的特性可以用:[Conditional("DEBUG")]MyConstructor(IExtensionManager mgr){...}
- 【转载】使用C#进行系统编程
原文:使用C#进行系统编程 虽然对于系统编程(System programming)的定义很模糊,不过可以将其描述为在比特.字节.指令,或CPU周期层面所进行的思考.系统编程这个概念也暗含了对性能和可 ...
- CSS3教程链接
下面列出本站关于CSS3的相关链接,以方便大家阅读: 第一节:<CSS3 Gradient> 第二节:<CSS3 RGBA> 第三节:<CSS3 Border-radiu ...
- TeeChart曲线平滑 Line.Smoothed
需要注意的是,在加载点之前,需要设置Smoothed属性为false 等点加载完成之后,再设置Smoothed属性为true, //如果直接设置Smoothed为true再去加载点的话,曲线就完全不显 ...
- JAVA开发--游戏24点
也比较简单,写的不好,代码里用到了LOOKANDFELL,QUAQUA8.0的包 package com.Game24; import java.awt.Container; import java. ...
- 关于oracle sql developer乱码的问题
写了一个sql查询,我擦居然乱码了 然后双击下这个框,居然又是中文: 有谁能够告诉我这是什么鬼
- Oracle数据库名、实例名、数据库域名、数据库服务名、全局数据库名的辨析
我也是看着各位大婶的博客然后一点点的来学习,不求全会,留个印象 数据库名 数据库名就是一个数据库的标识,用参数DB_NAME表示. 如果一台机器上安装了多个数据库,那么每一个数据库都有一个数据库名. ...
- 多线程技术在iOS开发中的使用
进程和线程 要使用多线程,首先需要理解进程和线程这2个概念.这里我简单的说一下. 所谓进程对应的是一个应用程序,负责开辟内存空间供应用程序使用,但是进程不能执行任务(指令).一个进程至少包含一条线程, ...