動態連結時出現undefined symbol錯誤
阿新 • • 發佈:2019-01-09
有時候編譯生成程式時,會出現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庫沒有的函式。