Mac OS编译C++库(XCode)

一  编译静态库

1.新建xcode项目,选择系统选择ios,工程选择static library。

2.项目名,作者自定,语言选择Object-C

3.保存目录自定。

4.将自动生成的两个.h  .m文件删除,然后添加我们自己的代码文件。

           注:.m是用来写C代码的,.mm文件是写C++代码的,不能混淆。但是此工程可以直接添加C++的class或者自定的hpp  cpp文件。

5.选择工程的编译输出平台,有虚拟机和真机两个选项。

       上图第一个🔨标志的为真机,下面的为虚拟机。此步骤尤为重要,输出平台选择有误会导致编译运行时出错,静态库不支持当前平台。

        说明:mac os为x86_64或i386平台,ios则为arm架构,包括arn64,armv7等。

6.配置工程相关属性:

    1⃣️Build Active Architecture Only下,将Release选择No

    2⃣️Valid Architectures添加x86_64。根据实际项目需求,注意debug和release的选择。

    3⃣️Validate Built Product选择是否在debug后release下生成静态库。

    4⃣️在Target》Build Phases〉copy files下,添加需要输出的头文件,即调用此静态库的头文件。

 

7.代码添加完毕之后,点击运行按钮,编译生成静态库

    此时生成的静态库支持的平台,和当前选择的输出平台有关(参考步骤5),使用如下命令来查看静态库支持的平台

# cd进入文件所在目录
cd /Users/Javen/Documents/MyProject/VPN 
# 查看信息
lipo -info libSangforSdk.a
输出结果:
Architectures in the fat file: libSangforSdk.a are: armv7 x86_64 arm64

    若输出结果不支持当前运行的平台(虚拟机或真机),那么编译出来的静态库无意义。

8.添加支持多种平台的静态库

    1⃣️输出平台选择虚拟机,然后编译出静态库,备份保存。

    2⃣️输出平台选择真机,编译并备份保存

    3⃣️使用如下命令将两个静态库链接到一起,来同时支持真机和虚拟机    

lipo -create XXXX_V7.a XXXX_V7s.a -output XXXX_all.a

 

二  使用静态库

1.新建IOS app工程,语言选择swift

2.新建一个桥接头文件,如wsift_OC.h

    

    在如图所示位置,添加桥接头文件的路径和文件名(可以将桥接文件拖动到编辑处)

3.新建一个.h和.mm文件

    1⃣️两个文件名例如为qt.h和qt.mm,在桥接文件中添加qt.h。

#ifndef swift_OC_h
#define swift_OC_h

#include "qt.h"
#endif /* swift_OC_h */

    2⃣️在qt.h中,也就是include qt.h的桥接文件swift_OC.h中,不能识别C语言的一些特性,如namespace,extern C等,所以有时候需要我们在qt.h中,对静态库的函数再封装一层,然后才可以在swift中调用。例如在qt.h中,引入opencv的头文件,就会报错,此时可以将opencv的头文件放在qqt.mm中,但是如何来二次封装静态库的函数,会比较麻烦。

    3⃣️在qt.mm中,实现qt.h的函数,此时swift即可调用静态库的函数。

ps:由于我才接触ios,所以很多东西不太了解,不知道有没有更好的方法来使用静态库,如果有大佬看到这篇博客,还请留言写下您宝贵的建议!

4.如果新建的工程语言选择object-c

    1⃣️此时不需要桥接文件

    2⃣️可以在.mm文件中直接调用静态库的函数啦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值