2013-02-19 39 views
1

我在XCode項目中有一些C++源文件(擴展名爲.mm)。 我想只編譯純C++(不使用objc語法或可可運行時使用)並在Android NDK構建(NDK r8d)中編譯它們。 這個問題似乎是G ++甚至不會考慮.mm文件作爲C++和將失敗:NDK:使用.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. 副本&命名.mm到.CPP爲Android項目 - 我不喜歡這個,因爲它使構建和版本控制複雜化,但它似乎是最基本的工作。
  2. 建立這個靜態庫(使用xcode) - 我試着去那裏,但我不確定要構建哪個體系結構,或者它是否有意義。
  3. 其他?

有沒有人有這方面的經驗或想法?謝謝。

溶液(見接受的答案)
LOCAL_CFLAGS + = -x C++

+0

您需要將'.mm'文件更改(端口)爲純C++,並使用文件擴展名'.cpp'或您喜歡的文件擴展名。 – trojanfoe 2013-02-19 10:50:27

+0

ndk不支持.m或.mm擴展名。您可以嘗試使用叮噹由cristax – Blackbelt 2013-02-19 10:50:34

+0

提供的快速評論感謝您。 @trojanfoe:我包括這個你的答案的擴展 - http://stackoverflow.com/questions/5327383/how-can-i-set-an-android-makefile-to-copy-rename-files – snowdragon 2013-02-19 10:55:52

回答

1

添加"-x c++" option到$ CFLAGS在.mk文件變量。這應該強制GCC使用C++編譯器。

編輯:很抱歉的錯字,「-x」選項,而不是「-c」和「C++」,而不是「CPP」

+0

這不僅僅是強制編譯器接受文件的情況,因爲它不會理解源文件中的Objective-C。這隻能通過手動干預來解決。 – trojanfoe 2013-02-19 10:56:23

+0

OP明確指出了問題:他有一個名爲.mm-文件的語法純C++文件,並且找不到GCC將這些文件視爲C++源的選項。 – 2013-02-19 10:58:15

+0

這是真的;我誤解了他想將所有'.mm'文件編譯爲C++,只有那些純C++的文件才能成功。 – trojanfoe 2013-02-19 11:04:17

1

儘管接受的答案,我還是會說,重命名文件.CPP將是正確的事情。關於如何使擴展與內容匹配有什麼爭議? Xcode在編譯C++文件時會很好,作爲獎勵,它可以保護你免受iOS端Objective C++的意外污染。

+0

或者只是用ObjC編譯器編譯它們。 – 2013-02-19 17:01:12

+0

ObjC(與ObjC++不同)不會編譯C++文件。 – 2013-02-19 20:06:23

+0

如果你控制共享的代碼庫,這當然是一個很好的答案和設計。在我的情況下,我無法修改它,所以我需要一種方法使其適用於這種限制。另外,我對編譯器標誌很好奇,因爲我記得看到類似這樣的工作。 – snowdragon 2013-03-04 16:15:38