编译器报错汇总
Posted Tony0571
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译器报错汇总相关的知识,希望对你有一定的参考价值。
1.arm7 arm7s 真机32位处理器 arm64 真机64位处理器
2.i386 模拟器32位处理器 x86_64模拟器64位处理器
3.linker .o 可能有依赖库未导入 , 库重复导入;
4.libsqlite3 数据库
今天试了一下iPhone Sqlite3数据库实例操作,发现一个有意思的问题,就是在加Framework时,有些教程说加libsqlite3.dylib有些说加libsqlite3.0.dylib,那到底加哪个呢?经过百度和谷歌得答案如下:
实际上libsqlite3.0.dylib本身是个链接,它指向libsqlite3.dylib。也就是说在项目里如果你添加libsqlite3.dylib和添加libsqlite3.0.dylib其实是添加了同一个文件,没有区别,那为什么要添加libsqlite3.dylib呢?
其实这个指针总是指向最新的sqlite3动态库,比如说sqlite3库更新了,如果我们引用的是libsqlite3.0.dylib你就不需要做任何修改了。
5.工程中引入的第三方库zxing、高德sdk编译不过,原因是这些库中引用的libstdc++.6.0.9.dylib中的C++函数不支持模拟器;
6.C++ 和 OC 混编时
当使用Xcode编写C++代码时,难以避免要使用xcode/C++混合编译。
如果你在Xcode中编写的工程中既有Objective-C代码,又有C++代码,在没有任何设置编译器选项的默认情况下,你将会发现一下问题:
(1)编译器报错。莫名其妙的错误,如C++的关键字(如virtual, new, delete等)找不到,不能解析啊等问题
(2)以*.cpp结尾的纯C++代码编译没有问题,但是既有Objective-c又有C++的文件(*.mm)文件就会报各种问题
在Xcode中,通常,Objective-c的后缀名位 .h/.m,C语言的后缀名为 .h/.c, C++的后缀名为.h/.cpp, 当一个文件中既有objective-c又有C++代码时,后缀名为 .h/.mm。在编写代码时要写对后缀名。其次,你可能发现,后缀名都写对了,代码也没有任何问题,编辑器也没有报错,为什么编译的时候就报错了呢?事实上,编译器和编辑器的工作是区分开来的,编辑器就是你写代码的地方,仅检查代码语法是否有错误,你语法没有错误当然不会报错了。编译器就是要编译运行在编辑器中编写好的代码,如果编辑器仅支持Objective-C,它怎么可能编译的了C++代码呢?
要让编译器知道代码中有C++代码,要对编译器做一些设置,先看图:
1.单击你的工程,选择TARGET下的目标文件
2.在选项卡中选择“Build Settings”选项
3.找到“Apple LLVM compiler x.x - Language”设置项(其中x.x为你的xcode默认的LLVM编译器版本,不同的xcode版本不一样)
4.图中绿色选中的选项“Compile Sources As”,意思是要把工程按照哪一种语言进行编译,默认是第一个“According to File Type”,将其改成Objective-C++即可。
现在重新编译一下你的工程是不是就可以成功编译了呢。
以上是关于编译器报错汇总的主要内容,如果未能解决你的问题,请参考以下文章