• 编译器报错汇总


    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++即可。

            现在重新编译一下你的工程是不是就可以成功编译了呢。

  • 相关阅读:
    递归汉诺塔问题
    递归求数组最大的那个数
    递归
    Overriding the Virtual Mechanism
    Shell中while循环的done 后接一个重定向<
    [转]【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
    vs2013一点事情
    深入理解JS中的变量作用域
    速效救心丸之django post 403
    速效救心丸之read
  • 原文地址:https://www.cnblogs.com/tony0571/p/5563901.html
Copyright © 2020-2023  润新知