我使用CMake和CPack配置和打包我的库.我已经编写了自己的find-module FindMyLib.cmake.
如何告诉CMake/CPack将此文件添加到CMake模块目录中,以便将来的开发人员可以简单地指定FIND_PACKAGE(MyLib)来使用我的库?
围绕获取原生opencv for android构建有很多问题和答案.有些使用gradle,有些则使用外部工具.对于原生OpenCV构建,这些众多,复杂且经常相互矛盾的描述可能会以一致的起点进行简化; 在创建Android Studio 2.2 Beta项目时,有一种方法可以包含C++支持:


此功能是在2016年6月左右添加的.有关详细信息,请参阅Android工具技术文档.
将Android Studio 2.2或更高版本与Gradle 2.2.0或更高版本的Android插件一起使用,您可以将C和C++代码编译到Gradle可以与您的APK打包的本机库中,从而为您的应用添加C和C++代码.然后,您的Java代码可以通过Java Native Interface(JNI)调用本机库中的函数.如果您想了解有关使用JNI框架的更多信息,请阅读适用于Android的JNI技巧.
检查Include C++ Support生成一个名为的外部构建文件CMakeLists.txt.
# Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# …Run Code Online (Sandbox Code Playgroud) windows java-native-interface cmake android-studio opencv4android
我正在使用Android studio 1.3.2 + ndk-r11b-windows-x86_64并尝试使用本机代码和C++ 11功能(share_ptr,weak_ptr等)构建项目,但是出现了一些错误.例如:
错误:(22,6)错误:命名空间'std'中的'shared_ptr'未命名模板类型
问题是:如何在Android Studio + NDK中使用C++ 11?
ps我cppFlags.add ("-std=c++11")在"build.gradle"中添加了标志
android.ndk {
moduleName = "game"
cppFlags.addAll(["-I${file("src/main/jni/native_app_glue")}".toString(),
"-I${file("src/main/jni")}".toString(),
"-I${file("src/main/jni/data")}".toString()])
cppFlags.add ("-std=c++11")
ldLibs.addAll(["android", "EGL", "GLESv2", "OpenSLES", "log"])
stl = "stlport_static"
}
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.
我有一个Android应用程序,它使用OpenCV的Java包装器进行图像处理.要将OpenCV添加到项目中,我必须将以下行添加到gradle.properties:
android.useDeprecatedNdk=true
Run Code Online (Sandbox Code Playgroud)
在我很长一段时间(我现在正在使用Gradle 2.2.2和Android Studio 2.2.2)更新我的Android Studio和Gradle之前,这一直工作正常,没有任何警告或错误(我知道).现在,当我构建我的应用程序时,我在消息窗口中收到以下警告:
警告:找到本机C/C++源代码,但似乎未配置NDK选项.请注意,如果您有Android.mk,则不会用于编译.建议的解决方法是通过添加以下内容来删除默认的jni源代码目录:
警告:gradle.properties中useDeprecatedNdk标志启用的不推荐的NDK集成将很快从Android Gradle插件中删除.
尽管此时构建成功,但正如第二个警告所示,这很可能在将来会造成一些麻烦,因此我希望在事情横空出现之前尽快解决它们.
有谁知道如何解决这些警告?或者除了添加所有已编译的代码(.so文件)并设置我之前提到的标志之外,还有其他方法可以将OpenCV导入Android项目吗?任何有关这方面的帮助将不胜感激.
我已经下载了OpenCV for Android Version 3.2并将其java模块导入我的项目.我已经将原生(c ++)代码复制到了modules目录中openCVLibrary320/app/src/main/jni.
如何创建Application.mk和Android.mk来编译这个sdk?(据我所知,ndk-build需要这两个文件)
我在使用Android Studio 2.2的原生OpenCv 3.0.0时遇到了麻烦,新的ndk支持即使用CMAKE构建脚本.以下是我得到的错误.我在我的gradel或cmake文件中遗漏了什么?请告诉我.
错误:FAILURE:构建因异常而失败.
构建命令失败.使用参数{--build E:\ OpenCvAndroid\OPecvTry2CSupport\app.externalNativeBuild\cmake \执行'C:\ Users\User\AppData\Local\Android\sdk\cmake\3.6.3155560\bin\cmake.exe'时出错debug\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"&& cd." CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o:在函数
~Mat': E:/OpenCVSdk/sdk/native/jni/include\opencv2/core/mat.hpp:278: undefined …
我正在学习如何使用OpenCV编写C++代码,我想在Android中运行它.我使用Android Studio.
我创建了一个支持C++的新简单项目,然后我将测试代码添加到C++文件中.看来,我自己的文件编译和链接.
现在,我认为与我的项目无关的其他因素导致许多错误.它似乎是NDK内部的东西.它可能是最新版本中的错误,如果是这样,我该怎么办呢?
C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiCopyConstBorder_8u_C4IR_L_as.s.o): relocation R_386_GOTOFF against preemptible symbol icv_ippJumpIndexForMergedLibs cannot be used when making a shared object
C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiConvert_32s16u_C1RSfs_as.s.o): relocation R_386_GOTOFF against preemptible symbol icv_ippJumpIndexForMergedLibs cannot be used when making a shared object
C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiNormRel_L1_32f_C1R_as.s.o): relocation R_386_GOTOFF against preemptible symbol icv_ippJumpIndexForMergedLibs cannot be used when making a shared object
C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiFilterBilateralBorderInit_L_as.s.o): relocation R_386_GOTOFF against preemptible symbol icv_ippJumpIndexForMergedLibs cannot be used when making a shared object
C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiScaleC_32f8u_C1R_as.s.o): relocation R_386_GOTOFF against preemptible symbol …Run Code Online (Sandbox Code Playgroud) opencv android-ndk android-studio opencv4android android-studio-3.0