我将 Eclipse Juno 与从 https://dl-ssl.google.com/android/eclipse/ 下载的 ADT(Android 开发人员工具)插件一起使用.
我创建了一个启用了原生支持的 Android 应用程序项目(右键单击该项目 →“Android 工具”→“添加原生支持”)。
尽管在我的 Application.mk
和 Android.mk
文件中以 C++11 为目标,Eclipse 无法解析像 std::thread 或 std::unique_ptr,但是当我构建项目时它编译得很好:唯一的问题是 C++11 符号解析。
如何让 Eclipse 正确解析 C++ 2011 符号?
最佳答案
如果带有 ADT 插件的 Eclipse Juno 可以编译 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>
你应该有这样的东西(其中 YYYYYYYYYY 也是一个随机数):
<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>
保存修改,重启 eclipse,如果 C++11 符号仍未解析重建索引(右键单击项目 → “索引” → “重建”)。
因为“符号”选项卡在项目的 C/C++ 选项中不可见,我被迫在 .cproject
文件中手动添加这些行以设置__cplusplus
的值为 201103L
。
我不知道 .cproject 文件是如何工作的,所以可能有更好的方法来做到这一点。我看到有些人更改项目的工具集选项以使“符号”选项卡可见(此处为 Android NDK build, Method could not be resolved 和此处为 Setting up C++11 (std::thread) for NDK with ADT/Eclipse)。
关于c++ - 在 Eclipse Juno ADT 中启用 C++11 符号解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204247/