V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wbing
V2EX  ›  问与答

想问下 xcode 编译 c++代码和 linux 下或用 NDK 编译有什么不同的吗???同样的代码,只有 xcode 下编就一大堆错误

  •  
  •   wbing · 2016-10-12 01:16:28 +08:00 · 1771 次点击
    这是一个创建于 2965 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样的:

    最近需要把自己部门的一个动态库(支持 Windows 和 Linux)提供给其他部门让他们去编译成安卓以及 IOS 可用的版本.

    在安卓下,他们写了个 makefile 去用 NDK 去编译,不用改动到 C++代码,就直接编译成功了.

    而在 IOS 下,却出现一大堆错误,各种头文件没包含进去之类的,需要在代码里面加...........

    例如这样的文件:

    头文件a.h

    #ifndef _A_H
    #define _A_H
    #define HANDLE void*
    #endif
    
    

    头文件b.h

    #ifndef _B_H
    #define _B_H
    int pp(HANDLE A);
    #endif
    
    

    源文件 main.cpp

    #include<iostream>
    #include "a.h"
    #include "b.h"
    using namespace std;
    
    int main()
    {
        return 0;
    }
    

    编译时 xcode 就会提示 b.h 中,HANDLE 为未定义

    然后那个负责 IOS 的那个人一直说我们这边代码不规范(这点我承认,但我又不知道说什么,我只是个新来的,代码也都不是我写的),总之感觉他满满的怨念.

    我不懂 ios,所以想问下 xcode 去编译 c++的代码,和 windows,Linux,Android 下去编译有什么不同??为何其他几个都能编译通过,就 xcode 编不过.

    4 条回复    2016-10-12 08:54:01 +08:00
    acros
        1
    acros  
       2016-10-12 01:36:58 +08:00 via iPhone   ❤️ 1
    xcode 用的 clang ,编译要求确实有差异,还有像路径选择之类的(包含路径时 clang 好像只认\, vs 编译器就正反斜杠都可以),这个看经验了,要不然就自己先编译一遍做检查。 即使非常了解 gcc clang vs 编译器实现的区别,也不敢过一个就打赌跨平台再编肯定成功啊
    longear
        2
    longear  
       2016-10-12 01:51:15 +08:00   ❤️ 1
    试试 Build Settings -> Search Paths -> Header Search Paths ” 中添加头文件的搜索路径

    严格来说在 b.h 需要再 #include "a.h" 才会有 HANDLE 的定义, 这种情况在 gcc 下确实也能编译通过。
    反正我都会把共用的类型单独定义,或者个别的再包含一次。
    bsidb
        3
    bsidb  
       2016-10-12 08:51:12 +08:00
    楼主这个代码看起来没问题啊~ 是不是 XCode 将.h 文件当做源代码文件进行了编译?
    楼主可以在命令行里试试"clang main.cpp",只编译 main 。

    编译器在处理时,只会将 a.h 和 b.h 在 main.cpp 中进行展开,因为楼主 include 的顺序已经设置好了,所以不会出现未定义的问题。
    bsidb
        4
    bsidb  
       2016-10-12 08:54:01 +08:00
    @bsidb 如果 XCode 将.h 当做源代码了,那么确实会报出未定义 HANDLE 的问题。 不过风格良好的.h 文件应该将他依赖的.h 文件也 include 进来。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2354 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:05 · PVG 00:05 · LAX 08:05 · JFK 11:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.