Ошибка сегментации (дамп ядра) при вызове файла Python из C ++ .so

0

Я пытаюсь создать файл.SO с C++ вместе с оболочкой, используя swig. Этот.SO был сгенерирован для вызова из python (среда Ubuntu).

Он работает хорошо, если я пытался с помощью кода Simple C++, но когда я пытаюсь построить с OpenCV, перед некоторыми проблемами.

opencvtest.cpp:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat image;    
    image = imread("/home/swigtest/MyPic.jpg",1);   // Read the file
    namedWindow( "Display window", WINDOW_AUTOSIZE );// Create a window for display.
    imshow( "Display window", image );                   // Show our image inside it.
    destroyWindow("Display Window"); 
    waitKey(0);                                          // Wait for a keystroke in the window
    return 0;
}

opencvtest.i

 %module opencvtest
         %{
         /* Put header files here or function declarations like below */

         extern int main();

         %}

        extern int main();

Итак, для Завершено следующие шаги:

  1. opencvtest.cpp - Пример кода, который я написал.

  2. opencvtest.i - соответствующий промежуточный файл, который я написал

  3. Выполнение команды: swig - C++ -python opencvtest.i

  4. Команда GCC для создания.o's (с оберткой): g++ -fpic -c opencvtest.cpp opencvtest_wrap.cxx -I/usr/include/python2.7 -I/usr/local/include -I/usr/local/include/opencv -I/usr/local/include/opencv2

  5. Команда для создания.so: g++ -shared opencvtest.o opencvtest_wrap.o -o _opencvtest.so -L/usr/local/lib/usr/local/lib/libopencv_calib3d.so/usr/local/lib/libopencv_core.so/usr/local/lib/libopencv_features2d.so/usr/local/lib/libopencv_flann.so/usr/local/lib/libopencv_highgui.so/usr/local/lib/libopencv_imgcodecs.so/usr/local/lib/libopencv_imgproc.so/usr/local/lib/libopencv_ml.so/usr/local/lib/libopencv_objdetect.so/usr/local/lib/libopencv_photo.so/usr/local/lib/libopencv_shape.so/usr/local/lib/libopencv_stitching.so/usr/local/lib/libopencv_superres.so/usr/local/lib/libopencv_ts.a/usr/local/lib/libopencv_video.so/usr/local/lib/libopencv_videoio.so/usr/local/lib/libopencv_videostab.so

6.Generated.so файл успешно

Затем попытался проверить python, выполнив следующие шаги:

7.python

8. >>> import opencvtest

9. >>> opencvtest.main()

Я получил ошибку: Ошибка сегментации (сбрасывание ядра)

Любой специалист может помочь устранить проблему?

  • 0
    Это неопределенный вызов функции main.
  • 0
    Я использовал тот же пример программы opencv для java-модуля и успешно получил результат 2 дня назад.
Показать ещё 2 комментария
Теги:
opencv
swig

1 ответ

2
Лучший ответ

Просто изменил имя метода main в opencvtest.cpp.

Помните, что также измените имя метода на шаге 9.

Это отлично работает для меня !.

Но я не знаю, что происходит за этим вызовом метода.

Я изменил имя метода от основного к одному.

На шаге 9: >>> opencvtest.one()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню