Android中使用OpenCV Native C++拼接图像遇链接错误求助
解决OpenCV C++
undefined reference to 'cv::Stitcher::createDefault(bool)' 编译错误 嘿,我之前在Android项目里用OpenCV做图像拼接时也踩过这个坑!这个链接错误本质是编译器找不到cv::Stitcher::createDefault的实现代码,大概率是模块依赖没配全或者版本/编译配置的问题,给你几个具体的排查和解决方向:
1. 确保引入Stitching模块的头文件
首先检查你的native-lib代码里有没有包含stitching模块的头文件,没有的话编译器连这个函数的声明都找不到:
#include <opencv2/stitching.hpp> // 必须添加这个!
2. 在CMakeLists.txt中链接Stitching模块
Stitcher属于OpenCV的stitching独立模块,默认链接OpenCV核心库时不会自动包含它。你需要在CMakeLists.txt里明确指定链接这个模块:
- 方式一:指定需要的OpenCV组件
find_package(OpenCV REQUIRED COMPONENTS core imgproc stitching)
- 方式二:在target_link_libraries里直接添加模块库
target_link_libraries( native-lib ${OpenCV_LIBS} opencv_stitching # 显式链接stitching模块 )
同时要确保CMakeLists里正确配置了OpenCV的路径,比如:
set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../opencv/sdk/native/jni") include_directories(${OpenCV_INCLUDE_DIRS})
3. 检查OpenCV版本兼容性
cv::Stitcher::createDefault(bool)这个接口是在OpenCV 3.x之后引入的,如果你用的是更旧的版本(比如2.x),接口名称会不一样,应该用不带参数的cv::Stitcher::create():
// 旧版本OpenCV的写法 cv::Ptr<cv::Stitcher> stitcher = cv::Stitcher::create();
可以对照你使用的OpenCV版本文档确认接口差异。
4. 确认OpenCV库包含Stitching模块
如果你是自己编译的OpenCV Android库,要确保编译时勾选了BUILD_opencv_stitching选项;如果是用官方预编译的OpenCV Android SDK,要下载完整包,检查sdk/native/libs/[abi]/目录下是否存在libopencv_stitching.so文件,没有的话说明你下载的SDK不包含这个模块,需要重新下载完整版本。
内容的提问来源于stack exchange,提问作者Wai Yan Hein
相关产品推荐
相关产品推荐

