我目前正在尝试使用Gradle编译OpenCV,并将其集成到我的Android项目中,但我面临一个问题,我不知道如何解决这个问题。
我在我的项目中创建了一个本机库模块,并创建了几个gradle任务,用于下载和解压缩项目中的源代码。然后,使用CMakeLists.txt项目中提供的OpenCV文件,在应用程序CMakeList.txt文件中使用"add_subdirectory“导入它。
这样,.cxx/RELEASE/buildHash/arm64-v8a/opencv/lib/arm64-v8a/文件夹中的OpenCV编译将正确完成,并生成两个必需的库libopencv_core.so和libopencv_imgproc.so。
但是,只有我自己的应用程序.so库和libopencv_imgproc.so包含在最终的.aar文件中。libopencv_core.so失踪了。如果我签入位于build/intermediates/cxx/RELEASE/buildHash/obj/arm64-v8a/,中的Gradle build文件夹,我可以看到与.aar中相同的问题。
有趣的是,如果我只需要使用libopencv_core.so,它将被正确地集成到最终的.aar中,我不明白为什么。
这是我的CMakeList.txt文件:
cmake_minimum_required(VERSION 3.18.1)
project("myapp")
add_library(
myapp
SHARED
myapp.cpp )
find_library(
log-lib
log )
# OpenCV source code and CMakeList.txt are located in the opencv folder
add_subdirectory(opencv)
# Library opencv_core and opencv_imgproc are generated by the OpenCV CMakeList.txt
target_link_libraries(myapp opencv_core opencv_imgproc ${log-lib} )
target_include_directories(myapp PUBLIC
opencv/modules/core/include
opencv/modules/imgproc/include
)
include_directories (${CMAKE_BINARY_DIR})我的问题是,我错过了什么?我必须指定什么东西来强制包含libopencv_core.so吗?
PS:为什么我不简单地集成二进制文件而不是编译它们呢?因为这个应用程序是针对from的,这需要从源代码编译完整的代码,所以这对我来说不是一个选项。
发布于 2022-02-07 12:45:32
我终于成功地将libopencv_core.so复制到正确的文件夹中,并生成了一个完整的aar。
我只需在我的应用程序CMakeLists.txt中添加以下内容:
set_target_properties( opencv_core PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} )
我不太明白为什么我必须加上这一行,但它是有效的!
https://stackoverflow.com/questions/71010461
复制相似问题