全部
我正在尝试使用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
你知道它是什么吗?
答案 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
并不完美;它有时会给你额外的东西或相互冲突的东西。但这肯定会有很大的帮助。