今天遇到個很郁悶的問題,運行程序時報錯:look up error: undefined symbol:...
首先運行時報錯找不到,一般就是動態庫里沒有這個符號。所以我用 nm命令 並用管道結合grep命令(nm .so | grep 'pattern') 查找了下那個未定義符號。結果發現,動態庫里有這個符號,這里T表示是在代碼段。
然后我懷疑可能加載的不是這個庫,可能是老版本的庫,於是我又用 ldd 命令執行可執行文件,查看運行時程序加載了哪些庫,(這里也可以用管道+grep),結果發現加載的還就是最新的庫!
簡直了!到底什么原因呢!
待續。。。
==============================================
找到原因,就是那個動態庫沒鏈接上!但是我用 ldd 命令明明可以查看到鏈上了這個庫。。。。。簡直了!就是cmake_current_binary_dir這個內置變量手殘打錯了!導致庫沒鏈上,cmake_current_binary_dir指的就是cmake的執行目錄,及makefile所在目錄(build目錄)
還需繼續深究。。。。。ldd 命令