zoukankan      html  css  js  c++  java
  • 解决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

  • 相关阅读:
    队列安排
    杂物
    最大数
    牛券
    斐波那契数列 !有疑惑
    方格取数
    阶乘之和-魏国
    过河卒
    二分查找算法(转)
    求整数的二进制表示中1的个数 (转)
  • 原文地址:https://www.cnblogs.com/A-Long-Way-Chris/p/4864573.html
Copyright © 2011-2022 走看看