Я использую Eclipse Juno с плагином ADT (Android Developer Tools), загруженным с https://dl-ssl.google.com/android/eclipse/.
Я создал проект приложения для Android с включенной поддержкой Native (щелкните правой кнопкой мыши проект → «Инструменты Android» → «Добавить собственную поддержку»).
Несмотря на ориентацию на C ++ 11 в моем Application.mk
а также Android.mk
файлы, Eclipse не может разрешить символы, такие как станд :: нить или же станд :: unique_ptr, но когда я строю проект, он хорошо компилируется: единственная проблема — разрешение символов C ++ 11.
Как я могу заставить Eclipse правильно распознавать символы C ++ 2011?
Если ваш Eclipse Juno с плагином ADT может скомпилировать код C ++ 11, но не может разрешить символы C ++ 11, вот процедура:
Открыть свой .cproject
файл в текстовом редакторе.
Поиск по следующей строке (где XXXXXXXXX — случайное число):
<tool id="com.android.gcc.compiler.XXXXXXXXX" name="Android GCC Compiler" superClass="com.android.gcc.compiler">
Добавьте в него следующее:
<option id="com.android.gcc.compiler.option.preprocessor.def.768340103" superClass="com.android.gcc.compiler.option.preprocessor.def" valueType="definedSymbols">
<listOptionValue builtIn="true" value="__cplusplus=201103L"/>
<listOptionValue builtIn="false" value="__cplusplus=201103L"/>
<listOptionValue builtIn="true" value="__GXX_EXPERIMENTAL_CXX0X__"/>
<listOptionValue builtIn="false" value="__GXX_EXPERIMENTAL_CXX0X__"/>
</option>
Вы должны иметь что-то вроде этого (где ГГГГГГГГ также является случайным числом):
<tool id="com.android.gcc.compiler.XXXXXXXXX" name="Android GCC Compiler" superClass="com.android.gcc.compiler">
<option id="com.android.gcc.compiler.option.preprocessor.def.768340103" superClass="com.android.gcc.compiler.option.preprocessor.def" valueType="definedSymbols">
<listOptionValue builtIn="true" value="__cplusplus=201103L"/>
<listOptionValue builtIn="false" value="__cplusplus=201103L"/>
<listOptionValue builtIn="true" value="__GXX_EXPERIMENTAL_CXX0X__"/>
<listOptionValue builtIn="false" value="__GXX_EXPERIMENTAL_CXX0X__"/>
</option>
<inputType id="com.android.gcc.inputType.YYYYYYYYYY" superClass="com.android.gcc.inputType"/>
</tool>
Сохранить модификации, запустить снова затмение и если символы C ++ 11 все еще не разрешены перестроить свой индекс (щелкните правой кнопкой мыши по проекту → «Индекс» → «Перестроить»).
Поскольку вкладка «Символы» не была видна в опциях C / C ++ проекта, я был вынужден добавить эти строки вручную в .cproject
файл для того, чтобы установить значение __cplusplus
в 201103L
,
Я не знаю точно, как работают файлы .cproject, поэтому, возможно, есть лучший способ сделать это. Я видел, как некоторые парни меняли параметры набора инструментов проекта, чтобы сделать вкладку «Символы» видимой (здесь Android NDK build, метод не может быть решен и здесь Настройка C ++ 11 (std :: thread) для NDK с помощью ADT / Eclipse).