解决Xcode升级7.0后,部分.a静态库在iOS9.0的模拟器上,link失败的问题

简单描述一下这个问题:
我们项目中使用了Google大神开发的LevelDB键值对数据库,在Xcode6,iOS8的环境下,编译好的.a静态库是可以正常使用的。但是升级后,发现在模拟器上无法link成功,真机上依然可以link成功。

再延伸一下LevelDB的介绍:

Leveldb是一个google实现的非常高效的kv数据库,目前能够支持billion级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。

Leveldb是Jeff Dean和Sanjay Ghemawat两位大神级别的工程师发起的开源项目。其它更多更关Leveldb的介绍,可以google详细了解。

Leveldb的项目在github上的链接: https://github.com/google/leveldb

如果需要使用Leveldb,首先需要去下载托管在github上的代码,然后将代码编译成静态库。

用Xcode编译方法我就不啰嗦了,我使用的是命令行方式,感觉更快捷。步骤如下:
如果需要编译成Mac OSX系统的静态库:

1.首先用cd指令到leveldb的根目录

2.输入指令:CXXFLAGS=-stdlib=libc++ make


如果需要编译成iOS系统的静态库:
 

1.首先用cd指令到leveldb的根目录

2.输入指令:CXXFLAGS=-stdlib=libc++ make PLATFORM=IOS


然后将leveldb根目录下的.a静态库文件和include文件一起拖到自己的工程中,配置好header search paths和library search paths。

到此就可以使用Leveldb提供的接口了,由于Leveldb是用C++开发的,所以需要在使用的时候将引用db.h的.m修改为.mm。 

现在来说一下标题问题的解决办法。升级后link失败,是由于模拟器要求的静态库文件支持的系统版本最低为7.0了。所以只需要稍微修改下编译指令,如下:

CXXFLAGS=-miphoneos-version-min=7.0 make PLATFORM=IOS

 

重新编译,生成的新.a文件就不会在模拟器上link失败了。

 

顺便提一下,如果需要修改编译的architecture类型或者sdk版本,可以去修改makefile。

需要直接使用LevelDB静态库的朋友,可以去这里clone:https://github.com/ALongWay/LSLevelDB

原文地址:https://www.cnblogs.com/A-Long-Way-Chris/p/4864573.html