OpenCV imwrite 函数导致“未定义符号”

我正在开发一个软件,它由一些带有 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 option


set(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})

吃鸡游戏
浏览 453回答 1
1回答

哈士奇WWW

我不擅长 cmake,但您似乎未能链接该imwrite()功能。我在 Mac 上,所以如果你在其他地方,这会有所不同,但如果你查看 OpenCV 库目录,特别libopencv_imgcodecs.dylib是这样:nm&nbsp;-gUP&nbsp;&nbsp;libopencv_imgcodecs.dylib&nbsp;|&nbsp;grep&nbsp;-i&nbsp;write你会看到类似的东西:__ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKNSt3__16vector...这意味着它imgcodecs提供了您需要的功能。我希望(感谢@Ptaq666)可靠地告知添加此库的最佳方法是使用:find_package(OpenCV&nbsp;3&nbsp;REQUIRED)其次是:target_link_libraries(<as&nbsp;you&nbsp;already&nbsp;have>&nbsp;${OpenCV_LIBRARIES})原始建议这意味着它imgcodecs提供了您需要的功能,因此我认为您需要将其添加到您的以下行中CMakeLists.txt:find_package(OpenCV&nbsp;3&nbsp;COMPONENTS&nbsp;core&nbsp;highgui&nbsp;imgproc&nbsp;REQUIRED)我想这会是这样的:find_package(OpenCV&nbsp;3&nbsp;COMPONENTS&nbsp;core&nbsp;highgui&nbsp;imgproc&nbsp;imgcodecs&nbsp;REQUIRED)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python