为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2021-06-10 21:09:43
我正在开发一个软件,它由一些带有 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)


查看完整回答
反对 回复 2021-06-15
  • 1 回答
  • 0 关注
  • 452 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信