由于编译错误,我在编译python包装器的swig的第一个教程示例时遇到了问题。
我参考了这个教程http://www.swig.org/Doc1.3/Python.html#Python_nn4
我创建了所有文件并执行了" 31.2.3手动编译动态模块"中指定的命令。
背景:我在Windows 64位系统上的cygwin中使用swig和gcc。
swig -python example.i
gcc -O2 -fPIC -c example.c
gcc -O2 -fPIC -c example_wrap.c -I/usr/include/python2.7/
这些命令工作正常。 在最后一步中,发生了很多错误。我玩了至少2个小时,但找不到错误。我也包含了所有相关的python-path,但错误仍然存在。
gcc -shared example.o example_wrap.o -o _example.so
example_wrap.o:example_wrap.c:(.text+0x4e): undefined reference to `PyArg_ParseTuple'
example_wrap.o:example_wrap.c:(.text+0x4e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `PyArg_ParseTuple'
example_wrap.o:example_wrap.c:(.text+0x79): undefined reference to `PyLong_AsLong'
example_wrap.o:example_wrap.c:(.text+0x79): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `PyLong_AsLong'
...
有人知道问题出在哪里吗?我想它与我在cygwin中的gcc中的编译器设置有关,但是我无法让它工作。
提前致谢
答案 0 :(得分:0)
您需要链接到语言库,在您的情况下使用Python。这就是定义这些符号的地方。你需要像
这样的东西gcc -shared -L/path/to/python/lib/folder -lpython2.7 ...
如果错误仍然存在,请尝试
gcc -v -shared -L/path/to/python/lib/folder -lpython2.7 ...
并查看结果输出中是否有任何信息表明您可能做错了什么(错误的python库名称等)。如果仍然卡住,请将输出复制到您的问题并对您的更新发表评论,以便我收到通知。