1. 程式人生 > >動態連結時出現undefined symbol錯誤

動態連結時出現undefined symbol錯誤

有時候編譯生成程式時,會出現undefined symbol:XXX 錯誤,比如編譯python的sqlite模組時,出現這樣的錯誤

可以使用nm命令,檢視依賴的庫是否含有這個XXX,以上面的編譯python的sqlite模組為例,

python編譯sqlite模組時依賴本地的sqlite,比如依賴/usr/local/lib/libsqlite3.so這個庫,出現了undefined symbol:sqlite3_set_authorizer

就可以使用命令:nm /usr/local/lib |grep sqlite3_set_authorizer

如果沒有任何輸出,則表明在這個libsqlite3.so中不存在sqlite3_set_authorizer函式或者變數(編譯libsqlite3.so時是否定義了SQLITE_OMIT_AUTHORIZATION)

在CMakeLists.txt檔案中

add_definitions(-DSQLITE_AMALGAMATION)
#add_definitions(-DSQLITE_OMIT_AUTHORIZATION) #註釋掉這一行
add_definitions(-DSQLITE_ENABLE_LOAD_EXTENSION)

還有可能就是sqlite庫和python的版本不匹配,python中用到了當前的sqlite庫沒有的函式。