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

Posted

技术标签:

【中文标题】mips64el-linux-android-g++:错误:无法识别的命令行选项“-mfpu=neon”【英文标题】:mips64el-linux-android-g++: error: unrecognized command line option '-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 文件中出现错误,这些错误已通过我在评论答案中提到的解决方案解决。 【参考方案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 它开始工作并且应用程序运行.. 谢谢大家...

【讨论】:

以上是关于mips64el-linux-android-g++:错误:无法识别的命令行选项“-mfpu=neon”的主要内容,如果未能解决你的问题,请参考以下文章

优化系列MIPS架构汇编优化总结

泰山JDK8升级u302,找到了更好的整合mips办法

Linux mips64r2 PCI中断路由机制分析

优化系列汇编优化技术:MIPS架构纯汇编优化及demo

在 ABI 的 NDK 工具链文件夹中找不到工具链,前缀为:mips64el-linux-android 如何修复?

No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android