使用SWIG和C ++

时间:2010-08-02 12:20:54

标签: c++ python swig

全部

我正在尝试使用SWIG将C ++代码导出到Python。 我在网站上阅读的C样本确实有效,但我对C ++代码有疑问。

以下是我称之为

的行
swig -c++ -python SWIG_TEST.i
g++ -c -fPIC SWIG_TEST.cpp SWIG_TEST_wrap.cxx -I/usr/include/python2.4/
gcc --shared SWIG_TEST.o SWIG_TEST_wrap.o -o _SWIG_TEST.so -lstdc++

完成后,我收到以下错误消息

ImportError: ./_SWIG_TEST.so: undefined symbol: Py_InitModule4

你知道它是什么吗?

3 个答案:

答案 0 :(得分:4)

看起来您没有链接到Python运行时库。比如将-lpython24添加到您的gcc行。 (目前我没有方便的Linux系统。)

答案 1 :(得分:1)

您可以尝试使用gcc

构建共享库
g++ -shared SWIG_TEST.o SWIG_TEST_wrap.o -o _SWIG_TEST.so

而不是直接使用ld

答案 2 :(得分:1)

正如马克所说,链接到python库是一个问题。通过运行python-config --ldflags,可以获得有关成功链接所需标记的提示的好方法。实际上,编译测试的一种特别轻松的方法如下:

swig -c++ -python SWIG_TEST.i
g++ -c `python-config --cflags` -fPIC SWIG_TEST.cpp SWIG_TEST_wrap.cxx
gcc --shared `python-config --ldflags` SWIG_TEST.o SWIG_TEST_wrap.o -o _SWIG_TEST.so -lstdc++

请注意python-config并不完美;它有时会给你额外的东西或相互冲突的东西。但这肯定会有很大的帮助。