環境:redhat enterprise linux 5 (server version)
項目中的lib3p目錄下放置了sqlite共享庫libsqlite3.so
cmake文件已經指定了lib3p路徑
運行項目生成的可執行文件時報錯:
./bin/test-slfdb_shell: symbol lookup error: /home/liangxx/sldb/build/sldb/lib/libsldb.so.1: undefined symbol: sqlite3_backup_init
百度到的結果是可執行文件鏈接的共享庫可能不正確,也就是說鏈接到的不是lib3p下的libsqlite3.so,而是/usr/lib下的舊版本libsqlite3.so,但是cmake已經正確指定了lib3p路徑,所以排除了這個可能。
那么到底是什么原因呢?從百度中學到一個命令ldd,這個命令可以查看可執行文件鏈接到的動態庫情況,於是我檢查了一下:

可以發現原來可執行文件鏈接的sqlite共享庫命名是libsqlite3.so.0,在lib3p下找不到libsqlite3.so.0命名的共享庫,所以轉向默認的路徑(/usr/lib)去查找,於是就連接到系統自帶的舊版本sqlite共享庫。
解決方法很簡單,進入到lib3p文件夾下,執行軟連接命令生成名字為libsqlite3.so.0的文件:

重新運行,木有問題了。
