将一个工程B拖到另一个工程A中:
1.关闭B,直接从路径里把A的xcodeproj拖到B的工程下面,关闭xcode重新打开。
2.打开A-TARGETS- Build Phases -Dependencies 添加B
3.建立一个软链接 从B的路径到A的路径。
ln -s 源文件 目标文件。
库介绍:
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。
iOS中的静态库有 .a 和 .framework两种形式;动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式。.a是静态库文件,是由单个.c(.m,.cpp)编译生成的目标文件压缩而成的,可以解压出来,但解压出来以后也只能看到目标文件,用objdump等工具可以查看反汇编,看不到源代码。在VS里面,C和C++封装成.lib和.dll,然后被其他工程调用。
在xcode里面怎么封装呢?
Mac OSX下 Xcode创建C++动态库:参考:
https://blog.csdn.net/qq981378640/article/details/53908061
查看导出的接口:
otool -- 分析可执行文件和dylib的依赖引用关系,常用命令 otool -L
nm -- 分析一个动态库的导出函数(exported symbols)
nm -a libz.1.2.5.dylib
Xcode Search Paths相关配置: 参考:
https://www.jianshu.com/p/9f9c1fd2e8b5
Framework Search Paths 管理导入的*.framework的路径
Library Search Paths 管理导入的*.a的路径
Header Search Paths 管理导入的头文件的路径
导入库的时候自动生成的的路径:$(PROJECT_DIR)/XcodeForSeachPathTest/ThirdLib/zhenLib,
手动拖动的路径:
"$(SRCROOT)/../Frameworks/zhenFW/zhenFW.framework",
很明显的区别是手动拖得有双引号,双引号的作用是如果在路径中有空格,可以识别该路径。没有双引号但是路径中有空格,我们发现它会自动变成两个路径。
在BuildSettings 页面中的Search Paths一节就是用来设置头文件路径。
相关的配置项用红框框起来了,共有三个配置项:
Header Search Paths
User Header Search Paths
Always Search User Paths
xcode的头文件路径有两种设置,一种是Header Search Paths,另一种是User Header Search Paths。两者对应两个include方式:
#include <boost/noncopyable.hpp> // 通过Header Search Paths搜索
#include"boost/noncpyable.hpp"// 通过User Header SearchPaths搜索
前者生成类似“-I path/to/header”的编译选项,后者生成类似“-iquote path/to/header”。
如果在User Header Search Paths设好了路径,但是代码用include <>包含头文件,编译会报错。这时把Always Search UserPaths设置成Yes,强制include <>也在User Header Search Paths搜索。
Always SearchUser Paths设置成Yes后,User Header Search Paths生成的编译选项变成“-I path/to/header”,而且会放在Header Search Paths的前面,所以User Header Search Paths会优先搜索。