CMake NDK项目添加log库编译报错:找不到lib_opencv目标
问题原因与解决办法
你遇到的set_target_properties Can not find target to add properties to: lib_opencv错误,核心原因是把自定义共享库和导入库写在了同一个add_library命令里,CMake无法识别lib_opencv这个导入目标,导致后续设置属性失败。
修正步骤
必须将导入库lib_opencv与你的自定义库native_opencv分开定义,不能混在同一个add_library中。以下是修正后的完整CMakeLists.txt:
cmake_minimum_required(VERSION 3.10.2) project(OPENcv_app) include_directories(../include) # OpenCV 配置 set(OpenCV_STATIC ON) set(OpenCV_DIR c:/tools/OpenCV-android-sdk/sdk/native/jni) find_package(OpenCV REQUIRED) # 单独声明导入库 lib_opencv add_library(lib_opencv SHARED IMPORTED) set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libopencv_java4.so) # 定义你的自定义共享库 native_opencv add_library( native_opencv SHARED # 源文件列表 ../ios/Classes/ArucoDetector/ArucoDetector.cpp ../ios/Classes/native_opencv.cpp ) target_include_directories( native_opencv PRIVATE ../ios/Classes/ArucoDetector ) # 查找系统 log 库 find_library(log-lib log) # 链接所有依赖库 target_link_libraries( native_opencv ${OpenCV_LIBS} lib_opencv ${log-lib} )
关键修改说明
- 拆分导入库与自定义库的声明:先单独用
add_library(lib_opencv SHARED IMPORTED)声明导入目标,再通过set_target_properties指定其路径,让CMake能识别这个目标。 - 独立定义自定义库:
native_opencv的add_library只包含自身的源文件,不再混杂导入库的声明。 - log库逻辑保留:你原本查找和链接log库的代码是正确的,无需修改。
额外提示
如果后续出现链接冲突(比如重复定义),可能是${OpenCV_LIBS}已经包含了libopencv_java4.so,此时可以移除lib_opencv的导入和链接代码,仅保留${OpenCV_LIBS}即可。
内容的提问来源于stack exchange,提问作者Ayush Yadav
相关产品推荐
相关产品推荐

