undefined symbol: xxx - undefined reference to `typeinfo


最近的項目(so庫)用到rocksdb,之前用的rocksdb是4.3.0,編譯使用很正常。因為要升級,所以將rocksdb升級到5.13.0。

但是經過修改的項目,編譯鏈接后,ldd -r xx.so 總是會出現 undefine symbol: _ZNVTrocksdb6Logger等之類的錯誤。

但是ldd中看出rocksdb.5.13確實鏈接成功了,於是百思不得其解。

在用該庫寫測試用例時,鏈接時會報

xxx.so: undefined reference to `typeinfo for rocksdb::FileLock'
xxx.so: undefined reference to `typeinfo for rocksdb::Logger'
xxx.so: undefined reference to `typeinfo for rocksdb::WritableFile'
xxx.so: undefined reference to `typeinfo for rocksdb::RandomAccessFile'
xxx.so: undefined reference to `typeinfo for rocksdb::EnvWrapper'
xxx.so: undefined reference to `typeinfo for rocksdb::SequentialFile'

於是查找“undefined reference to `typeinfo”,看到http://blog.csdn.net/ai2000ai/article/details/47152133文章。

 

原來,新版的rocksdb引入了USE_RTTI選項,可以對需函數的typeinfo進行開關,於是加上“USE_RTTI=1”重新編譯rocksdb。

再在自己的項目編譯時也加上-frtti。終於,ldd沒有出現undefine symbol錯誤。

 

但是,在鏈接測試用例時,還是會出現xxx.so: undefined reference to `typeinfo for rocksdb::FileLock'等錯誤。

於是nm -C xxx.so| grep Logger,還是能看到

U typeinfo for rocksdb::Logger

U vtable for rocksdb::Logger

又郁悶了,苦思冥想中。。。。

 

經過一番糾結之后,發現是在鏈接測試用例時,鏈接的還是就的rocksdb.so.5.13.0,果斷好了。。。。。

 

那nm出來的

U typeinfo for rocksdb::Logger

U vtable for rocksdb::Logger

是不是說明是正常的嘞?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM