1
我正在應用SWIG將C++庫轉換爲Python庫。將SWIG應用於C++時,f1(const char * str)與f1(char * str)不同?
我有一個頭文件和源文件(瑣碎的事情被忽略):
test.h
void f1(char* str);
test.cc
void f1(const char* str) {
/* do something */
}
當我建立它,它不會拋出任何關於這種不匹配的錯誤或警告。
但是,當我輸入在Python通過SWIG生成我的模塊:
>>> import (MYMODULE)
ImportError: /usr/local/lib/libMYMODULE.so: undefined symbol: _ZN2f14str12iii
這樣的錯誤發生以上情況。
但是,在將頭文件和源文件固定爲具有相同參數後,const char* str
,錯誤已得到解決。
我想知道的是,爲什麼C++編譯器和構建器不會拋出錯誤或警告,把它放在SWIG和Python中成爲問題。
另外,像'echo _ZN2f14str12iii | C++ filt'會通過對名稱進行修飾來告訴你缺少哪個(如果缺少'char *'或'const char *',我不清楚它的名稱)。它看起來應該在本機模塊的編譯/鏈接期間失效,而不是在轉換到Python期間。 – jww 2015-04-01 11:12:15