xcode 编译 系统 深入学习(2)(待续)

编译(通常我们说的编译包括编译和链接)报错

知识要点:

  • 我们知道编译型语言,源文件必须经过编译(build)和链接(link)两个过程才可以产生可执行文件
  • build 阶段只有声明就可成功。一般来说就是有头文件
  • link 阶段必须有实现文件,具体为m文件

头文件找不到

第一步,分析这是编译问题,也可以通过 xcode 编译日志 查看,(如何查看日志,见前一篇)。

如何找到头文件

header search path

  • xcode 默认查找路径 HEADER_SEARCH_PATHS=DerivedData/ProjectTest/Build/Products/Debug-iphonesimulator/include
  • xcode 会到 header search path 指定目录查找头文件
    将相关的头文件添加到 build setingheader search path即可
    不需要记忆。用上一篇的方法打印出来

inherit

有时我们会看到这个 $(inherited) 意思继承上一个配置。啥意思?
xcode的配置是可以继承的。 如图打开xcode。清清楚楚。

xcode 编译 系统 深入学习(2)(待续)_第1张图片
image.png

选择level,会有多个配置出现在界面。
最终是 resolved value 为准
几点建议:

  • 选中相关条目,xcode都有帮助文档,多看!
  • 使用相对路径 (Build settings reference 帮助文档有大量的宏可以使用)
  • 也可以使用配置文件,更加灵活

recursive

recursive:循环查找就说在这个目录下的所有目录包括子目录查找。 在设置路径时尽量设置 non-recursive 。

undefined symbol

分析这是链接问题。日志可以看到 ld 命令。
原因一般有:

  1. 没有添加链接依赖
  2. 没有找到目标文件
    一些遇到的场景:
  • m文件没有参与编译。


    image.png

    选择m文件在xcode中选中对应的target。这个算是原因1吧。

如何添加依赖,如何添加搜索路径。

目前对应ios开发有两种第三方库

  • static lib
  • framework
  • swift 新方式 module
    两种方式原理一样,只是操作不同而已

添加搜索路径

和添加头文件路径类似

static library

  • xcode 默认查找路径 LIBRARY_SEARCH_PATHS=DerivedData/ProjectTest/Build/Products/Debug-iphonesimulator

framework

  • xcode 默认查找路径 FRAMEWORK_SEARCH_PATHS=DerivedData/ProjectTest/Build/Products/Debug-iphonesimulator

将相关的路径添加到 build seting 对应的参数下即可
不需要记忆。用上一篇的方法打印出来

  • 也可以使用xcode 拖拽实现()
    Build Phases -> Link binary with Libraries
    image.png

    这里有个status 选项
status frameworks 或者 libraries 存在时机
Required App 启动时 必须存在
Optional 使用时必须存在

添加依赖

方案1. xcode 拖拽
Build Phases -> Target Dependencies
方案2. other linker flags
-l"xxxx" -framework "xxxx"
参照系统写! 参照前一篇如何查看xcode日志的详情,可以看到大量的用法。

这些配置信息也可以使用 xcconfig 参考xcconfig 文件 简单使用指南
如果你在 xcconfig 文件中定义了非系统变量,变量就会在 xcode 对应target -> build setting -> User-Defined 产生。根据需要使用

你可能感兴趣的:(xcode 编译 系统 深入学习(2)(待续))