Eclipse中NDK无法编译(哪怕是一个新建的空白项目)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eclipse中NDK无法编译(哪怕是一个新建的空白项目)相关的知识,希望对你有一定的参考价值。

23:53:01 **** Incremental Build of configuration Default for project HelloWorld **** "E:\\NDK\\ndk-build.cmd" all Cannot run program "E:\NDK\ndk-build.cmd": Launching failed Error: Program "E:\NDK\ndk-build.cmd" not found in PATH

参考技术A 首先eclipse能运行.cmd文件吗?cmd不是windows命令行吗,能直接在系统运行。另外错误报的信息是没有在classpath找到这个文件,一是你的ndk-build.cmd文件在E:\\NDK目录下不存在,二有可能是eclipse
java
compiler不支持编译.cmd文件,然后在classpath下找不到生成的.class文件,同样会报错。因为看不到你的project,所以只能根据猜测第二种情况要大一些。

无法使用 Eclipse 的 NDK 插件设置 __ANDROID__ 符号

【中文标题】无法使用 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="&quot;C:\Frameworks\androidndk\platforms\android-19\arch-arm\usr\include&quot;"/>
                        <listOptionValue builtIn="false" value="&quot;C:\MinGW\include&quot;"/>
                        <listOptionValue builtIn="false" value="&quot;C:\Frameworks\androidndk\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\lib\gcc\arm-linux-androideabi\4.9.x\include&quot;"/>
                        <listOptionValue builtIn="false" value="&quot;C:\Frameworks\androidndk\sources\android\native_app_glue&quot;"/>
                    </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中编译时出错

NDK调试,无法设置断点

Eclipse自动编译NDK/JNI的三种方法

eclipse里配置Android ndk环境,用eclipse编译.so文件

怎样在eclipse中加载opencv for android

ADT+NDK搭建jni编译环境