当C++中包含OpenCV时,使用cType创建文件

2024-10-02 18:26:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个c++文件的.so文件(两个摄像头.cpp)包括主文件()和另一个C++文件(比如ABC。abc.c包括opencv。使用ctypes创建对象时

 g++ -fPIC -shared twocams.cpp -o twocams.so
 Test = ctypes.cdll.LoadLibrary('/home/administrator/Desktop/project/twocams/twocams.so')

我得到的错误是:- 未定义符号:_ZN2cv12VideoCapturersERNS

如何解决这个问题?我想在python中使用c++代码。任何替代方案都是可以接受的。在


Tags: 文件testsoctypesopencvcppshared摄像头
1条回答
网友
1楼 · 发布于 2024-10-02 18:26:15

当您创建一个共享对象并希望使用它时,您必须将您的工件与这个共享对象的所有依赖项相关联。E、 g.我创建一个libtwocams.so

#include <opencv2/videoio.hpp>

void test() {
    cv::VideoCapture v;
    cv::Mat m;
    v >> m;
}

要使用这个共享对象,我必须链接到libopencv_core、libopencv_videoio、libopencv_imgproc、libopencv_imgcodecs、libz等等。我用

^{pr2}$

另一种解决方案是将共享对象链接到依赖库。E、 g

g++ -fPIC -shared twocams.cpp -o -ltwocams -lopencv_core -lopencv_imgproc -lopencv_imgcodecs -lopencv_videoio -lz -lwebp -lpthread -ltiff -lpng

创建一个共享库,使加载程序加载所有依赖项。您可以使用ldd检查依赖关系。在

图书馆的顺序很重要。如果libA对libB有依赖关系,那么必须先链接libA,然后再链接libB。在

如果使用opencv的共享库,则不需要链接所有其他依赖项。在

下面是一个逐步的手册:

安装conan

安装cmake

将存储库bincrafters添加到conan

conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan

创建:

  • 在conanfile.txt文件在
  • 在CMakeLists.txt文件在
  • src公司/两个摄像头.cpp在
  • 构建/

在conanfile.txt文件公司名称:

[requires]
opencv/3.4.2@bincrafters/stable

[generators]
cmake

[options]
opencv:shared=True

在CMakeLists.txt文件公司名称:

cmake_minimum_required(VERSION 3.12)
project(twocams)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

add_library(twocams SHARED src/twocams.cpp src/twocams.h)
target_link_libraries(twocams ${CONAN_LIBS})

转到build并安装依赖项:

cd build
conan install ..  build missing

使用cmake生成项目:

cmake ..
cmake  build .

相关问题 更多 >