【问题标题】:Native c++ with Android on Eclipse - gives error on stdlib but worksEclipse 上带有 Android 的本机 C++ - 在 stdlib 上给出错误但可以工作
【发布时间】:2023-03-09 22:10:02
【问题描述】:

我一直在 android eclipse 环境中构建我的 android 应用程序。构建我的 c++ 代码并使用 ndk-build 独立编译它。这很好用。

我需要调试 logcat 突然抛出的 sigsegv 错误。

所以我将 Eclipse 中的项目切换为“在 android 中添加本机代码”。现在它会调试我的 c++ 代码,但每次我使用任何 std 组件(例如 vector)时都会给我一个错误,因此我无法运行代码,因为它包含错误。

项目在之前的配置上运行良好。我相信我为 std 支持添加了一个库。

知道如何正确调试本机代码吗?

感谢您的帮助

更新 我完全重新安装了我的 sdk、eclipse(这次是juno)和所有插件。不用找了。错误检查无法识别 java 和 std 相关的东西:

#include <jni.h>
using namespace std;

带有红色下划线。

c++ 的其余部分被正确识别。

更新2

当我将 ${NDKROOT}/sources/cxx-stl/gnu-libstdc++/include 添加到路径和包含时,java 语句已经包含在内。净矢量尚未,我也尝试添加 ${NDKROOT}/sources/cxx-stl/stlport/stlport 但它还没有解决矢量问题。如果禁用错误检查,则项目编译,如果我犯了语法错误,编译器会警告我。这对我来说没问题。

【问题讨论】:

  • 在 Eclipse 中编写 C++ 代码时,您是否获得了代码辅助和自动错误检查功能?
  • @25061987 是的,我在 c++ 中获得了代码帮助和错误检查。问题是代码检查无法识别来自 java (#include ) 和 std (使用命名空间 std;) 的元素,其余的工作正常。我认为这可能与我必须将 stlport 添加到我的 application.mk 文件而 eclipse 构建器没有看到这一点有关。
  • 我在我的 Java 项目中使用 Cocos2D-X C++ include。并将我的 java 项目转换为 C++ 项目。当我使用 cocos2D-X 类时,写半个类名并按 Ctrl + Space 无助于完成类,因此它没有告诉我可以对特定对象类型使用的方法。就像我们在 java 项目中使用外部 .jar 时,它提供了智能感知。你知道可能是什么问题吗?或者你也面临同样的问题?
  • @25061987 不,这在我的项目中运行良好。 Eclipse 刚刚超过标准。我认为这应该是一个单独的问题,但您可能应该将您的项目转换为 c++。
  • 我已将其添加为单独的问题here。我还将 android 项目转换为 C++。如果您发现任何问题,请随时编辑我的问题。

标签: java android c++ eclipse debugging


【解决方案1】:

您可能首先可以禁用 Project Properties|C/C++ General|Code Analysis 中的错误,以便您的项目编译。

然后您可以检查Project Properties|C/C++ General|Paths and Symbols 中的包含路径是否正确。

我还听说更新 ADT 插件可能会有所帮助。

【讨论】:

  • @Alex 谢谢。我已将我的 ndk-build 目录添加到 PATH(系统)。在 Project Properties -> c++ compiler 中,我添加了 ndk-build 的完整路径。但是,如果我从命令行启动 eclipse,我会收到一条消息“无法找到“ndk-build”的完整路径”。如果按照您的建议将 ndk-build 路径添加到路径和符号,它还没有任何区别,我仍然收到消息。
  • @dorien 我的包含路径是 C:\android-ndk-r8\platforms\android-8\arch-arm\usr\include 在 Paths and Symbols|Includes|GNU C++ 下,我能够可以从命令行启动Eclipse。也许你需要一个绝对路径?
  • 谢谢。我将路径更改为platforms/android-4/arch/arm/usr/include。命令启动(和以前一样)有效,但仍列出“无法找到“ndk-build”的完整路径”。调试仍然不起作用,向量仍然标记为红色。我在这里读到 [link]mhandroid.wordpress.com/2011/01/23/… [/link] 你不能在 c++ 中调试,也许这是不可能的?
  • @dorien 可以进行调试,但设置过程很痛苦。在Android NDK初学者指南wowebook.be/book/android-ndk-beginners-guide/#中有详细描述(例如)
  • 我拿到了这本书,看起来不错。我会试一试并及时通知您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多