OC与C++混编工程配置
2015-05-29 10:59
453 查看
新公司做室内地图引擎,类似于百度地图的这种,底层是C++ openGLES写的一套接口,在这个基础上需要进行OC的封装,在这里写一些过程中需要注意的点;
先说几个工程配置的问题:
-ObjC的使用,在TARGETS-build settings-Linking- Other Linker flags中添加的该参数,该参数的使用一般是针对OC catagray的,百度的解释是:”这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和category的话只有加入这个flag才行“,目前暂时不知道该标识是否会影响C++混编;
关于Library路径搜索的一点问题:
我们在进行三方库引用时候经常会发生链接错误的问题,工程跑一大堆的红色错误,大多数情况是因为系统引用不到所需要的文件导致的。一种可能性是工程中的引用文件已失效,虽然代码仍旧在文件夹中,但是没有与xcode工程挂勾,解决办法是删除工程中的目录,Add Files to ""导入真实存在的文件,这种情况一般解决起来比较容易;如果还引用不到,可以到TARGETS-Build Phases-Compile Sources下查看,把没有添加到的添加进去;
另外一种是Library,也就是我们常用的静态库链接错误,一般是工程找不到三方资源的查找目录,如果你想查看你现在的引用查找目录,TARGETS-bulid settings-Search path下Library Search Path就能看得到,这时你会发现这里有两个Debug和release。
这里将要添加的路径是你的静态库的搜索目录,把目录路径添加到里面就可以了; 不过有一点,我们在工程调拭的时候一般会用到真机和模拟器两种情况,打过包的同学知道这两种包的名字是一模一样的,而且把包文件一般会分在两个目录下,
如上图这样子,而我们要添加这样的库时会把两个文件夹放到一个文件下,这样有时会导致编译器查找不到二进制的文件而导致编译错误,所以我们要配置一下Library Search Path;这里要说一下添加的宏命令;
$(PROJECT_DIR)/FMMapKit/3rd/${CONFIGURATION}-${PLATFORM_NAME}
如上所示,${CONFIGURATION}宏表示Debug或者是Release版本的,${PLATFORM_NAME}表示是模拟器还是真机目录,加上中间的那个”-“,我们看一下是不是跟上图中显示的那个目录名字是对应的呢?在这里你可以百度一下/article/7587997.html,可以查看更多宏替换的资料;
接下来要说一下关于C++相关的配置,这里涉及的应该是与编译器相关的知识,暂时属于盲区,有兴趣的可以买龙书研究一下,这里不多说,直接上图;
还有一项:
哦不对,这里是两项;
估计这里设置的是C++和C的版本,暂时未解;
到此,工程配置先说到这里,改天继续;
先说几个工程配置的问题:
-ObjC的使用,在TARGETS-build settings-Linking- Other Linker flags中添加的该参数,该参数的使用一般是针对OC catagray的,百度的解释是:”这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和category的话只有加入这个flag才行“,目前暂时不知道该标识是否会影响C++混编;
关于Library路径搜索的一点问题:
我们在进行三方库引用时候经常会发生链接错误的问题,工程跑一大堆的红色错误,大多数情况是因为系统引用不到所需要的文件导致的。一种可能性是工程中的引用文件已失效,虽然代码仍旧在文件夹中,但是没有与xcode工程挂勾,解决办法是删除工程中的目录,Add Files to ""导入真实存在的文件,这种情况一般解决起来比较容易;如果还引用不到,可以到TARGETS-Build Phases-Compile Sources下查看,把没有添加到的添加进去;
另外一种是Library,也就是我们常用的静态库链接错误,一般是工程找不到三方资源的查找目录,如果你想查看你现在的引用查找目录,TARGETS-bulid settings-Search path下Library Search Path就能看得到,这时你会发现这里有两个Debug和release。
这里将要添加的路径是你的静态库的搜索目录,把目录路径添加到里面就可以了; 不过有一点,我们在工程调拭的时候一般会用到真机和模拟器两种情况,打过包的同学知道这两种包的名字是一模一样的,而且把包文件一般会分在两个目录下,
如上图这样子,而我们要添加这样的库时会把两个文件夹放到一个文件下,这样有时会导致编译器查找不到二进制的文件而导致编译错误,所以我们要配置一下Library Search Path;这里要说一下添加的宏命令;
$(PROJECT_DIR)/FMMapKit/3rd/${CONFIGURATION}-${PLATFORM_NAME}
如上所示,${CONFIGURATION}宏表示Debug或者是Release版本的,${PLATFORM_NAME}表示是模拟器还是真机目录,加上中间的那个”-“,我们看一下是不是跟上图中显示的那个目录名字是对应的呢?在这里你可以百度一下/article/7587997.html,可以查看更多宏替换的资料;
接下来要说一下关于C++相关的配置,这里涉及的应该是与编译器相关的知识,暂时属于盲区,有兴趣的可以买龙书研究一下,这里不多说,直接上图;
还有一项:
哦不对,这里是两项;
估计这里设置的是C++和C的版本,暂时未解;
到此,工程配置先说到这里,改天继续;
相关文章推荐
- Android NDK学习 <五> C++ 支持
- C++ 8.1 面向对象的标准库(未完)
- c++中BOOL和bool的区别
- C++静态联编与动态联编
- 经典回溯算法——八后问题
- 趣味图形之 余弦函数cos与直线相交(另一种相交)
- C/C++之回调函数介绍
- 趣味图形之 余弦函数cos与直线相交
- 值得推荐的C/C++框架和库 (真的很强大)
- 趣味图形之 二次函数与圆相交
- C++指针--字符串与指针
- 趣味图形之 正弦函数sin&&余弦函数cos相交
- C++ 7.9 指向函数的指针
- C++学习 Boost状态机说明statechart
- C++读取系统当前时间
- C++读取系统当前时间 分类: C/C++ 2015-05-29 10:03 47人阅读 评论(0) 收藏
- c++中的继承、聚合、关联和组合
- [C语言] 对于scanf()函数使用%d格式说明符无法读取字符的个人理解
- C++类对应的内存结构
- C++ string类型和char类型转换