从C ++ .so调用python文件时出现分段错误(Core Dumped)

时间:2015-02-13 15:03:27

标签: python c++ opencv ubuntu swig

我正在尝试使用swig生成基于C ++的.SO文件和包装器。生成.SO是为了从python(Ubuntu Environment)调用。

如果我尝试使用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&#39; 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。所以/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。所以/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. 6.Generated .so文件成功

    然后尝试测试python,按照步骤:

    7.python

    8.&GT;&GT;&GT; import opencvtest

    9.&GT;&GT;&GT; opencvtest.main()

    我收到错误:分段错误(核心转储)

    任何一位专家都可以帮助解决问题吗?

1 个答案:

答案 0 :(得分:2)

刚刚在opencvtest.cpp中更改了方法名称main。

请记住,也请在步骤9更改方法名称。

这对我来说很好!。

但我不知道此方法调用背后的进程。

我将方法名称从main更改为。

在第9步:&gt;&gt;&gt; opencvtest.one()