在 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++ 类(获取属性错误)

Swig:在 Python 中使用 c++ STL 复杂

如何使用 Python 列表在 C++ 中使用 SWIG 分配 std::vector?

如何使用 SWIG 在 C++ 中调用 python 函数?

使用 SWIG 在 Java 和 C++ 之间传递缓冲区

使用 SWIG 跨 C++ 和 Ruby 的多态性