美文网首页
合并模拟器和真机的通用.a静态库

合并模拟器和真机的通用.a静态库

作者: Evyn_ | 来源:发表于2016-09-10 14:20 被阅读167次

    1. 利用lipo命令来合并模拟器和真机库:

    用模拟器编译生成的静态库是i386架构的,而ios是arm6/arm7/arm7s架构的,架构不兼容,所以用模拟器编译的静态库在真机上不能用。

    要使静态库编译出来,模拟器和真机都可以使用的,可以分别编译生成libxxx.a,然后用lipo来合并这两个libxxx.a

    如下:

    打开终端,cd到build目录,然后使用lipo命令如下:

    lipo -create Release-iphoneos/libxxx.a Release-iphonesimulator/libxxx.a -output libxxx.a

    将合并生成一个通用的libxxx.a

    lipo -info命令用来查看静态库的类型

    lipo -info Release-iphoneos/libxxx.a

    lipo -info Release-iphonesimulator/libxxx.a

    这种方法有时候终端会报各种未知错误,所以还有另外一种方法

    2 利用脚本直接生成通用的静态库

    创建Aggregate:

    在静态库工程里新建一个target(File/New/Target), 在弹出的框中在左边选择iOS下面的Other, 然后在右边选择Aggregate:


    在静态库工程里新建一个target(File/New/Target), 在弹出的框中在左边选择iOS下面的Other, 然后在右边选择Aggregate:

    创建好Aggregate之后,在Target下面选择刚刚创建的Aggredate, 然后选择"Editor/Add Build Phase/Add Run Script Build Phase",这里注意要在工程里点击下Bulid Phasas ,将其内容展开  才能在 Add Bulid Phase中选到Add Run Script Build Phase

    然后在Run Script下面添加以下脚本:以下内容全部复制粘贴即可

    # define output folder environment variable

    UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

    # Step 1. Build Device and Simulator versions

    xcodebuild -target TARGETNAME ONLY_ACTIVE_ARCH=NO -configuration Release -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

    xcodebuild -target TARGETNAME -configuration Release -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

    # make sure the output directory exists

    mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

    # Step 2. Create universal binary file using lipo

    lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"

    # Last touch. copy the header files. Just for convenience

    cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"

    此时,选中项目的Aggregate进行编译,编译成功会在Build目录下面出现Debug-universal目录,该目录里面生成的libxxx.a就是合并的静态库。注意:这里我遇到两个坑就是  1 编译报错说什么NoT Directionary 没有相关文件,。解决办法就是打开文件目录将所缺少的文件新建文件加进去,我加了一个模拟的静态库文件和一个真机的静态库。再编译,就好了

    相关文章

      网友评论

          本文标题:合并模拟器和真机的通用.a静态库

          本文链接:https://www.haomeiwen.com/subject/qauyettx.html