2014-03-05 31 views
0

我在編譯由於編譯器錯誤導致的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路徑,但錯誤仍然存​​在。

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的編譯器設置有關,但是我無法讓它工作。

在此先感謝

+2

這些不是編譯器錯誤,但*鏈接器*錯誤。這意味着它無法找到您直接或間接調用的某些功能。要解決它,你需要鏈接到包含這些文件的庫。來自SWIG wiki的 –

+0

[此條目](http://www.dabeaz.com/cgi-bin/wiki.pl?SwigFaqDLLUsingCygwin)看起來可能相關。 –

回答

0

您需要鏈接到語言庫,Python在您的情況。那就是那些符號被定義的地方。你會需要像

gcc -shared -L/path/to/python/lib/folder -lpython2.7 ... 

如果錯誤仍然存​​在,請

gcc -v -shared -L/path/to/python/lib/folder -lpython2.7 ... 

,並查看是否有輸出結果中,表示你可能會做錯了什麼(錯誤Python庫名稱的任何信息,等等)。如果仍然卡住,請將輸出複製到您的問題中,並對您的更新發表評論,以便我可以收到通知。

+0

感謝您的提示,但錯誤仍然存​​在。 錯誤消息不會更改。 我不知道繼續,我不能擺脫這個錯誤,即使我現在讀了很多關於這個錯誤。 我懷疑,這與cygwin下gcc的用法有關,但我不確定這一點。 我對他們兩人的經驗太少。 – whoww