【发布时间】:2017-02-02 07:54:05
【问题描述】:
我在使用原生 OpenCv 3.0.0 和 Android Studio 2.2 时遇到问题,它支持新的 ndk,即使用 CMAKE 构建脚本。以下是我得到的错误。我的 gradle 或 cmake 文件中是否缺少任何内容?请告诉我。
错误:失败:构建失败并出现异常。
- 出了什么问题:
任务 ':app:externalNativeBuildDebug' 执行失败。
构建命令失败。 使用参数执行“C:\Users\User\AppData\Local\Android\sdk\cmake\3.6.3155560\bin\cmake.exe”时出错 {--build E:\OpenCvAndroid\OPecvTry2CSupport\app.externalNativeBuild\cmake\调试\mips64 --target native-lib} [1/1] 链接 CXX 共享库 ..\obj\mips64\libnative-lib.so 失败: cmd.exe /C "cd . && C:\Users\User\AppData\Local\Android\sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe -target mips64el-none -linux-android -gcc-toolchain C:/Users/User/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64 --sysroot=C:/Users /User/AppData/Local/Android/sdk/ndk-bundle/platforms/android-21/arch-mips64 -fPIC -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -fno-exceptions -fno-rtti -O0 -fno-limit-debug-info -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative -lib.so -o ..\obj\mips64\libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -llog -lm "C:/Users/User /AppData/Local/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/libgnustl_static.a" && 光盘。” CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o:在函数
~Mat': E:/OpenCVSdk/sdk/native/jni/include\opencv2/core/mat.hpp:278: undefined reference tocv::fastFree(void*)' CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o:在函数cv::Mat::release()': E:/OpenCVSdk/sdk/native/jni/include\opencv2/core/mat.hpp:367: undefined reference tocv::Mat::deallocate()' clang++.exe:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) 忍者:构建停止:子命令失败。
还有我的 Cmake.txt
cmake_minimum_required(VERSION 3.4.1)
add_library( native-lib
SHARED
src/main/cpp/native-lib.cpp )
include_directories(E\:\\OpenCVSdk\\sdk\\native\\jni\\include )
find_library( log-lib log )
target_link_libraries(native-lib ${log-lib} )
还有我的 Gradle 构建文件
{ apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
applicationId "viki.opecvtry2csupport"
minSdkVersion 16
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
【问题讨论】:
-
include 目录应该保留 cmake 语法,我认为:include_directories(path/to/your/sdk/native/jni/include ) target_link_libraries(native-lib log)
-
我在这里遇到了与导入的 ffmpeg 共享库类似的问题,您找到解决方案了吗?
-
我还没有找到解决办法
-
我正在使用新系统,我认为您应该使用 addLibrary 在 CMakeLists.txt 中添加所需的库,然后使用 set_target_properties 提供它的位置。但最肯定你应该看看这个:github.com/sengsational/HelloCv 示例项目。它对我来说开箱即用。
-
我无法使用 Cmake 文件来实现,但我已经设法使用 .mk 文件来实现它。查看此github.com/VikasRao/NDK-OpenCVAndroid
标签: android opencv gradle android-ndk android-studio-2.2