在 C++ 中使用 SWIG
Posted
技术标签:
【中文标题】在 C++ 中使用 SWIG【英文标题】:using SWIG with C++ 【发布时间】:2010-08-02 12:20:54 【问题描述】:大家好
我正在尝试使用 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:未定义符号:Py_InitModule4你知道它是什么吗?
【问题讨论】:
【参考方案1】:您似乎没有链接到 Python 运行时库。类似于将-lpython24
添加到您的 gcc 行。 (我目前手头没有 Linux 系统)。
【讨论】:
【参考方案2】:您可以尝试使用gcc
构建共享库
g++ -shared SWIG_TEST.o SWIG_TEST_wrap.o -o _SWIG_TEST.so
而不是直接使用ld
。
【讨论】:
【参考方案3】:正如 Mark 所说,链接到 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
并不完美;它有时会给你额外的东西,或者冲突的东西。但这肯定会有很大帮助。
【讨论】:
以上是关于在 C++ 中使用 SWIG的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 SWIG 在 Python 中实例化 C++ 类(获取属性错误)
如何使用 Python 列表在 C++ 中使用 SWIG 分配 std::vector?