Я пытаюсь создать файл.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();
Итак, для Завершено следующие шаги:
opencvtest.cpp - Пример кода, который я написал.
opencvtest.i - соответствующий промежуточный файл, который я написал
Выполнение команды: swig - C++ -python opencvtest.i
Команда 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
Команда для создания.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()
Я получил ошибку: Ошибка сегментации (сбрасывание ядра)
Любой специалист может помочь устранить проблему?
Просто изменил имя метода main в opencvtest.cpp.
Помните, что также измените имя метода на шаге 9.
Это отлично работает для меня !.
Но я не знаю, что происходит за этим вызовом метода.
Я изменил имя метода от основного к одному.
На шаге 9: >>> opencvtest.one()