gpt4 book ai didi

python - 当C++代码中包含opencv时,使用ctypes创建.so文件

转载 作者:行者123 更新时间:2023-12-02 10:39:13 25 4
gpt4 key购买 nike

我正在尝试创建包含main()和另一个C++文件(例如abc.h)的c++文件(twocams.cpp)的.so文件。 abc.c包括opencv。在使用ctypes创建对象时,

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

我收到以下错误消息:-
undefined symbol :_ZN2cv12VideoCapturersERNS_3MatE

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

最佳答案

创建共享对象并要使用它时,必须将 Artifact 链接到该共享对象的所有依赖项。例如。我创建了一个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等。我用编译我的程序
g++ main.cpp -o main -ltwocams -lopencv_core -lopencv_imgproc -lopencv_imgcodecs -lopencv_videoio -lz -lwebp -lpthread -ltiff -lpng

另一种解决方案是将共享库链接到从属库。例如。
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 remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan

创建:
  • conanfile.txt
  • CMakeLists.txt
  • src / twocams.cpp
  • build /

  • 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 .

    关于python - 当C++代码中包含opencv时,使用ctypes创建.so文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53057878/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com