zoukankan      html  css  js  c++  java
  • iOS 编译Undefined symbols报错问题

    最常见的原因有这几种:

    1 build的时候没有加framework

    比如说,有一段代码我用了OpenGL,引入了头文件

    #import <OpenGLES/ES2/glext.h>

    build的时候,compile阶段没有问题,但是link就报错Undefined symbols for architecture xxx(这里xxx可能是armv7s,armv7或者arm64,取决于配置,稍后会说)。解决方法是在Build Phases的Link Binary With Libraries里加入OpenGLES.framework,再编译就ok了

    2 工程依赖的库,编译时Architectures不匹配

    在Build Settings里,第一项Architectures,是配置项目的编译体系结构,主要有下面3个配置项:

    Architectures:将要创建的Bundle支持的ARCH

    Valid Architectures:有效的ARCH,这个配置项没什么用,一般配置成armv7,armv7s,arm64就行了

    Build Active Architecture Only:是否只打当前连接设备对应的arch

    在真机上,常见的ARCH有3个:armv7,armv7s,arm64

    armv7:对应iPhone4和iPhone4S

    armv7s:对应iPhone5和iPhone5C,还有早期的iPad

    arm64/armv8:对应iPhone5S和iPhone6系列,以及比较新的iPad,如iPad mini2,iPad Air

    而ARCH是向下兼容的,比如用armv7打出来的包,可以运行在arm64架构的设备上;反之不行。所以如果应用要支持iPhone4系列,Architectures就一定要包含armv7才行

    而Build Active Architecture Only是指是否仅当前连接的设备的架构打包。比如Architectures配置了armv7和arm64,Build Active Architecture Only设置为YES,那么连接iPhone4的时候,就会以armv7打包;连接iPhone5S的时候,就会以arm64打包。如果Build Active Architecture Only设置为NO,那么就会2种架构都打,在运行期根据实际的设备架构来执行。所以最后打出来的Bundle体积会比较大

  • 相关阅读:
    【Unity】校验身份证号有效性
    【Unity】敏感词过滤
    【C#】2.C#程序结构
    常用Git命令手册
    Android删除指定路径下指定前缀或后缀的文件
    《Android源码设计模式》学习笔记之ImageLoader
    Android截屏的几种实现
    react 项目 合并单元格解决方案
    iconfont字体图标的使用方法(转)
    如何让antd的Modal组件的确认和取消不显示(或自定义按钮)(转载)
  • 原文地址:https://www.cnblogs.com/leesymbol/p/4401722.html
Copyright © 2011-2022 走看看