【发布时间】:2015-04-14 15:53:41
【问题描述】:
我正在尝试使用 swig 生成基于 C++ 的 .SO 文件以及包装器。生成此 .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
创建 .o 的 GCC 命令(带包装器):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。所以 /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。 /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videoio.so /usr/local/lib/libopencv_videostab.so
6.生成.so文件成功
然后尝试测试python,步骤如下:
7.python
8.>>> 导入 opencvtest
9.>>> opencvtest.main()
我收到错误:分段错误(核心转储)
任何一位专家可以帮助解决这个问题?
【问题讨论】:
-
调用 main 函数是未定义的行为。
-
我在java模块中使用了相同的示例opencv程序,并在2天前成功得到了结果。
-
这就是未定义行为的美妙之处——结果未定义。
-
您好,柔印谢谢您的回复!使用 swig 测试 python 的任何其他可能的解决方案。
标签: python c++ opencv ubuntu swig