【问题标题】:mips64el-linux-android-g++: error: unrecognized command line option '-mfpu=neon'mips64el-linux-android-g++:错误:无法识别的命令行选项“-mfpu=neon”
【发布时间】:2017-03-29 13:36:18
【问题描述】:

我正在尝试运行与 NDK 和 OpenCV 相关的项目。该项目构建无误。但是当我运行应用程序时,我得到了错误:

mips64el-linux-android-g++:错误:无法识别的命令行选项'-mfpu=neon'

我的 Application.mk 文件如下所示:

APP_STL := gnustl_shared
APP_CPPFLAGS := -frtti -fexceptions

# NEON
APP_CFLAGS += -mfpu=neon
APP_ABI := armeabi-v7a
APP_PLATFORM := android-18
APP_OPTIM := debug
APP_MODULES := nVisoDemo-1.1
NDK_TOOLCHAIN_VERSION := 4.9
HAVE_LIB_CEVA := false # CUSTOM VARIABLE USED (NOT ANYMORE) IN Android.mk  

Android.mk:

# Freeimage
include $(CLEAR_VARS)
LOCAL_MODULE := libfreeimage
LOCAL_ARM_NEON := true
#LOCAL_SRC_FILES := $(NVISO_LIBS_DIR)/libfreeimage-3.14.so
LOCAL_SRC_FILES := D:/Siddharth/StudioProjects/OpenCVDemo/nvsdk/src/main/jni/Fr‌​amework/nviso/libs/a‌​rmeabi-v7a/libfreeim‌​age-3.14.so
include $(PREBUILT_SHARED_LIBRARY)

我试图从 application.mk 文件中删除 APP_CFLAGS += -mfpu=neon 但它在 cpp 文件中给出了所有编译错误..

还要提一下,上面的代码在 Eclipse 中可以完美运行...但问题仅出现在 Android Studio 中

任何帮助将不胜感激..提前致谢..

【问题讨论】:

  • 尝试删除 '-mfpu=neon' ,我想这可能会解决问题或只是将其注释掉。
  • 我尝试删除它,但它给了我所有与 cpp 相关的编译错误....
  • 粘贴那些CPP相关的错误日志,这将有助于跟踪发生了什么?顺便说一句,只要给APP_CPPFLAGS:= 。删除 -mfpu=neon
  • 如果我删除它会给出这些错误:错误:(145、28)错误:'实现'不是类或命名空间错误:(146、18)错误:'InputImageFormat'不是类或命名空间错误:(181、28)错误:“实现”不是类或命名空间错误:(145、28)错误:“实现”不是类或命名空间错误:(146、18)错误:“InputImageFormat”不是类或命名空间错误:(181、28)错误:“实现”不是类或命名空间错误:(104、35)错误:在“&&”标记之前需要“,”或“...”跨度>
  • @LethalProgrammer 解决方案有效...问题中提到的错误不再存在然后我在 cpp 文件中出现错误,这些错误已通过我在评论答案中提到的解决方案解决。

标签: c++ opencv android-ndk


【解决方案1】:

默认情况下,您将为每个 NDK ABI 构建:arm5、arm7、arm64、mips、mips64、x86 和 x86_64,但 -mfpu=neon 仅对 arm7 和 arm64 有效。

一般而言,对于此类情况,您需要通过针对 TARGET_ARCH_ABI 进行测试来保护特定于架构的标志,但对于 NEON 支持,有一个标志仅用于此目的:

LOCAL_ARM_NEON := true

将其添加到 Android.mk 中的每个模块中。

【讨论】:

  • 您好,我在 Android.mk 中有 3 个模块定义,其中一个我在这里分享,我已按照您所说的添加,但错误仍然存​​在..: # Freeimage include $(CLEAR_VARS) LOCAL_MODULE : = libfreeimage LOCAL_ARM_NEON := true #LOCAL_SRC_FILES := $(NVISO_LIBS_DIR)/libfreeimage-3.14.so LOCAL_SRC_FILES := D:/Siddharth/StudioProjects/OpenCVDemo/nvsdk/src/main/jni/Framework/nviso/libs/armeabi-v7a/ libfreeimage-3.14.so 包含 $(PREBUILT_SHARED_LIBRARY)
  • 复制到问题中(请不要把这样的东西放在 cmets 中,它是不可读的)。该模块是预构建的。 cflags/cppflags 根本不会影响它。
【解决方案2】:

您好,我通过以下方式解决了这个问题:

实际上@LethalProgrammer 所说的是仪式。当我从 Application.mk 中删除“APP_CFLAGS += -mfpu=neon”行时,它应该已经开始工作,但是当我删除该行时,它会在我的 cpp 文件中出现各种错误。

所以问题是我正在使用命令行构建,而且我已经将 .so 文件放在应用程序的 jnilibs 文件夹中,所以它构建了两次..

因此我从应用程序的 build.gradle 中删除了它
外部原生构建 { ndkBuild { 路径“D:/Siddharth/StudioProjects/OpenCVDemo/nvsdk/src/main/jni/Android.mk” } }

所以最后从 build.gradle 中删除上述代码并从 application.mk 文件中删除 -mfpu=neon 它开始工作并且应用程序运行.. 谢谢大家...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多