2010-08-02 128 views
2

HI全部使用SWIG和C++

我想使用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 

你知道是什麼嗎?

回答

4

看起來您並未鏈接到Python運行時庫。就像將-lpython24添加到您的gcc行一樣。 (我目前沒有Linux系統)。

1

你可以嘗試使用建設gcc

g++ -shared SWIG_TEST.o SWIG_TEST_wrap.o -o _SWIG_TEST.so 

共享庫,而不是直接使用ld

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++ 

注意是不完美的;它有時會給你額外的東西或衝突的東西。但這應該肯定有很大幫助。