无法使用 Eclipse 的 NDK 插件设置 __ANDROID__ 符号
Posted
技术标签:
【中文标题】无法使用 Eclipse 的 NDK 插件设置 __ANDROID__ 符号【英文标题】:Cannot set __ANDROID__ Symbol with NDK Plugin for Eclipse 【发布时间】:2014-01-11 03:14:27 【问题描述】:我正在尝试编译其中一个 android NDK 示例,特别是“native-activity”。我在 Eclipse 中使用“现有代码中的 Android 项目”选项为此示例创建了一个项目,然后使用项目菜单中的“Android 工具 -> 添加本机支持”选项将其转换为本机。
不幸的是,当我构建时出现以下错误:
无法解析类型“EGL_DEFAULT_DISPLAY”
这个问题我搜了一圈,大部分人都说"__ANDROID__"
需要在编译的时候定义。建议是从项目属性的“C/C++ 常规 -> 路径和符号”窗口中将其添加为符号。
但我的问题是“路径和符号”中实际上没有“符号”选项卡。我确实为其他 C++ 项目(非 NDK)提供了它,但我这里没有。
我猜这与 NDK Plugin for Eclipse 的工作方式有关。有没有其他方法可以使用此处的选项定义此符号?或者我是否需要找到一种不同的方式来将 C++ 支持添加到为我提供“符号”选项卡的 Android 项目?
【问题讨论】:
您在 ndk-build 步骤或索引期间是否看到此问题? 不确定“索引”的确切含义,但似乎这不是 ndk-build 的问题(.so 构建良好),这只是 Eclipse 代码分析的问题。如果我将“类型无法解析”错误变为警告,它会让我启动应用程序。有点 hacky,但我现在可以忍受它......? 是的,这是最简单的方法。通常,启动新的工作区可以使项目正确,但有时却不能。 我遇到了同样的缺少符号选项卡的问题。希望我们能得到答案。 【参考方案1】:我在缺少Symbols
选项卡时遇到了同样的问题,我终于开始四处寻找,发现每个工具链的选项卡都不同。出于某种原因,Android GCC 工具链尤其没有symbols
选项卡。 (对我来说似乎是一个错误)
要更改当前工具链: 属性 -> C/C++ 构建 -> 工具链编辑器
我不得不取消选中Display compatible toolchains only
然后我选择了选项Cygwin GCC
并将Current builder
设置为Android Builder
symbols
标签现在显示出来了。
据我所知,一切似乎都与使用 Android GCC 工具链一样。如果这种方法有任何不好的副作用,我不知道它们是什么。如果我发现了什么,我会回来更新我的答案。
【讨论】:
我只是将工具链切换到 Cygwin,设置__ANDROID__
符号并将工具链切换回 Android GCC。仍然有效!【参考方案2】:
请原谅我的拼写错误,我是学生,现在正在学习英语。我的项目也有同样的问题。我不得不花一整天时间寻找解决方案:)。在您的根项目文件夹中,您需要打开文件“.cproject”并添加以下文本:
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.android.gcc.option.definedSymbols.156386137" superClass="com.android.gcc.option.definedSymbols" valueType="definedSymbols">
<listOptionValue builtIn="false" value="__ANDROID__=0"/>
</option>
我不知道 ID 部分末尾的数字是什么意思,但我随意更改了它们,一切正常。
此文本添加符号__ANDROID__
。此外,“符号”选项卡变得可见:
请注意__ANDROID__
的值为 0。如果您打开 Preferences->C/C++ General/Path 和 Symbols/Symbols(现在在这里),您可以检查它
在 Eclipse 中出现 __Symbols__
部分的证明:
最后,我的__.cproject__
文件的一部分:
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="$ProjName" buildProperties="" description="" id="com.android.toolchain.gcc.665394794" name="Default" optionalBuildProperties="" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.android.toolchain.gcc.665394794.1631346437" name="/" resourcePath="">
<toolChain id="com.android.toolchain.gcc.1551434208" name="Android GCC" superClass="com.android.toolchain.gcc">
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="com.android.targetPlatform.1128161810" isAbstract="false" superClass="com.android.targetPlatform"/>
<builder id="com.android.builder.1391955059" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Android Builder" superClass="com.android.builder">
<outputEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name=""/>
</outputEntries>
</builder>
<tool id="com.android.gcc.compiler.541863979" name="Android GCC Compiler" superClass="com.android.gcc.compiler">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.android.gcc.option.includePath.156366136" superClass="com.android.gcc.option.includePath" valueType="includePath">
<listOptionValue builtIn="false" value=""C:\Frameworks\androidndk\platforms\android-19\arch-arm\usr\include""/>
<listOptionValue builtIn="false" value=""C:\MinGW\include""/>
<listOptionValue builtIn="false" value=""C:\Frameworks\androidndk\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\lib\gcc\arm-linux-androideabi\4.9.x\include""/>
<listOptionValue builtIn="false" value=""C:\Frameworks\androidndk\sources\android\native_app_glue""/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.android.gcc.option.definedSymbols.156386137" superClass="com.android.gcc.option.definedSymbols" valueType="definedSymbols">
<listOptionValue builtIn="false" value="__ANDROID__=0"/>
</option>
<inputType id="com.android.gcc.inputType.661587658" superClass="com.android.gcc.inputType"/>
</tool>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="jni"/>
</sourceEntries>
</configuration>
</storageModule>
希望这些信息有用。
【讨论】:
以上是关于无法使用 Eclipse 的 NDK 插件设置 __ANDROID__ 符号的主要内容,如果未能解决你的问题,请参考以下文章
如何判断ndk在eclipse上路径是不是安装成功 2014