Как создать библиотеку Python .so с OpenCV - PullRequest
0 голосов

Я использую OpenCV в своем проекте. Моя цель - создать финальный скрипт на python. Если это не стало проблемой в Windows, и мой файл .pyd нормально работает в Windows, то в Linux я вижу проблемы.

Как я понимаю, все библиотеки расположены успешно. Файлы работают хорошо. Но при попытке построить все ломается. Много ошибок "неопределенная ссылка".

#include "HeadrToDll.h"

namespace py = boost::python;
//namespace fs = std::filesystem;

py::list LineOfListGeneral(string mask_adress)//, bool del_file = 1)
{
    LineOfList lines;
    int er = 0;
    vector<int> res_c = lines.General(mask_adress, er);
    //if (del_file) fs::remove(mask_adress);
    py::list res_py;
    if (er == 0)
    {
        for (int i = 0; i < res_c.size(); i++)
            res_py.append(res_c[i]);
    }
    else res_py.append(er);
    return res_py;
}

BOOST_PYTHON_MODULE(Work)
{
    py::def("LineOfListGeneral", LineOfListGeneral);
}
#define BOOST_PYTHON_STATIC_LIB
#include <boost/python.hpp>
#include <Python.h>
//#include <filesystem>
#include "ObjectList.h" //my work that uses OpenCV

Я использую два Макфайла. Вниз:

cmake_minimum_required (VERSION 3.8)

#SET(CMAKE_CXX_STANDARD 17)
find_package (Python COMPONENTS Interpreter Development REQUIRED)
FIND_PACKAGE(Boost REQUIRED)
find_package( OpenCV REQUIRED )
message(${Python_LIBRARIES})
include_directories( ${OpenCV_INCLUDE_DIRS} ${Python_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} )
LINK_LIBRARIES(${Python_LIBRARIES} ${Boost_LIBRARIES} ${OpenCV_LIBS})
message(${OpenCV_LIBS})
#add_executable (LineDetector2.1 "LineDetector2.1.cpp" "LineDetector2.1.h")
add_executable (LineDetector2.1 "SourceToDll.cpp" "HeadrToDll.h")
#add_library(LineDetector2 STATIC "SourceToDll.cpp" "HeadrToDll.h")
#target_link_libraries( LineDetector2.1 ${OpenCV_LIBS} )
#target_link_libraries( LineDetector2.1 ${Python_LIBRARIES})
target_link_libraries(LineDetector2.1 LINK_PUBLIC ${Boost_LIBRARIES}
        ${Python_LIBRARIES}
        ${OpenCV_LIBS})

И UP:

cmake_minimum_required (VERSION 3.8)

project ("LineDetector2.1")

add_subdirectory ("LineDetector2.1")

Я тоже пытался

g++ -c -fPIC -I/usr/include/python2.7 -I/usr/local/include/opencv4 SourceToDll.cpp -o SourceToDll.o
g++ -shared -Wl,-soname,SourceToDll.so -o Work.so  SourceToDll.o -L/usr/local/lib -lpython2.7 -lboost_python

Но при попытке импортировать в python

ImportError: ./Work.so: undefined symbol: _ZN2cv5CannyERKNS_11_InputArrayERKNS_12_OutputArrayEddib
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...