我正在开发一个软件,它由一些带有 python 绑定的核心 C++ 代码组成。C++ 代码已经使用了很多 OpenCV,但现在我试图在两者之间保存一个图像,但我似乎无法使用该imwrite函数。将它添加到 main.cpp 并在 Eclipse 中使用“默认”构建进行编译,但是为了将它与现有的 Python 代码一起使用,我需要使用 CMake 进行构建。这再次编译正常,但是当我从 Python 类调用代码时,出现此错误:ImportError: /.../pythonCPP.so: undefined symbol: _ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKSt6vectorIiSaIiEE我搜索了这个并从我可以收集到的信息中,这似乎通常源于某种链接问题。我不知道从哪里开始在 CMake 文件中查找或添加任何标志。我在 Ubuntu 16.04 64 位上使用 OpenCV 3.2.0。这是对应的 CMakeLists.txt:cmake_minimum_required(VERSION 2.8 FATAL_ERROR)project("blah")#----------------------------CMAKE & GLOBAL PROPERTIES-------------------------#list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")###============= C++11 support====================================include(CheckCXXCompilerFlag)CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)if (COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -g0 -s -std=c++11")elseif (COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -g0 -s -std=c++0x")else () message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")endif ()#=================================================================# PYTHON optionset(PYTHON_OPTIONS "2.X" "3.X")set(PYTHON_DESIRED_VERSION "3.X" CACHE STRING "Choose which python version to use, options are: ${PYTHON_OPTIONS}.")set_property(CACHE PYTHON_DESIRED_VERSION PROPERTY STRINGS ${PYTHON_OPTIONS})
1 回答
哈士奇WWW
TA贡献1799条经验 获得超6个赞
我不擅长 cmake,但您似乎未能链接该imwrite()
功能。
我在 Mac 上,所以如果你在其他地方,这会有所不同,但如果你查看 OpenCV 库目录,特别libopencv_imgcodecs.dylib
是这样:
nm -gUP libopencv_imgcodecs.dylib | grep -i write
你会看到类似的东西:
__ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKNSt3__16vector...
这意味着它imgcodecs
提供了您需要的功能。
我希望(感谢@Ptaq666)可靠地告知添加此库的最佳方法是使用:
find_package(OpenCV 3 REQUIRED)
其次是:
target_link_libraries(<as you already have> ${OpenCV_LIBRARIES})
原始建议
这意味着它imgcodecs
提供了您需要的功能,因此我认为您需要将其添加到您的以下行中CMakeLists.txt
:
find_package(OpenCV 3 COMPONENTS core highgui imgproc REQUIRED)
我想这会是这样的:
find_package(OpenCV 3 COMPONENTS core highgui imgproc imgcodecs REQUIRED)
添加回答
举报
0/150
提交
取消