2

我在 XCode 项目中有一些 C++ 源文件(扩展名为 .mm)。我试图只编译那些纯 C++(不使用 objc 语法或可可运行时)并在 Android NDK 构建(NDK r8d)中编译它们。问题似乎是 g++ 甚至不会将 .mm 文件视为 C++ 并且会失败:

arm-linux-androideabi-g++: error: Objective-C++ compiler not installed on this system

我试过:
1. LOCAL_CPP_EXTENSION := .mm (在 Android.mk 中) - 没有帮助。
2. 搜索有关如何接受自定义文件扩展名的 g++ 文档 - 找不到任何内容。

我真的很想找到一种方法来强制 NDK/g++ 接受 .mm 文件,但对其他想法持开放态度,例如:

  1. 将 Android 项目的 .mm 复制并重命名为 .cpp - 我不喜欢这样,因为它会使构建和版本控制复杂化,但它似乎是最基本的可行方法。
  2. 将其构建为静态库(使用 xcode) - 我尝试去那里,但我不确定要构建哪种架构,或者它是否有意义。
  3. 其他的?

有没有人对此有一些经验或想法?谢谢。

解决方案(见接受的答案)
LOCAL_CFLAGS += -x c++

4

2 回答 2

2

“-x c++”选项添加到 .mk 文件中的 $CFLAGS 变量。这应该会强制 GCC 使用 C++ 编译器。

编辑:抱歉错字,“-x”选项,不是“-c”和“c++”,不是“cpp”

于 2013-02-19T10:54:53.433 回答
1

尽管接受了答案,但我仍然认为将文件重命名为 .CPP 是正确的做法。使扩展名与内容匹配有什么争议?Xcode 可以很好地编译 C++ 文件,并且作为奖励,它可以保护您免受 iOS 端的 Objective C++ 意外污染它。

于 2013-02-19T16:57:29.373 回答