一次debug遇到的疑惑 某天發現一個程序有點問題。祭上print大法,在關鍵的 lib_func() 函數里添加 print 調試信息,重新編譯運行。 期望 print 出的信息一點都沒有,但是程序確確實實又執行過了 libfunc() ,因為除了添加的調試 print 沒有執行 ...
最近,給同事定位了一個符號表的沖突問題,簡單記錄一下。 A代碼作為靜態鏈接庫,被包含進了B代碼,然后編譯成了動態鏈接庫,B.so A代碼同時作為靜態鏈接庫,被編譯進入了main的主代碼。 main函數調用B.so里面的函數,同時B.so里面的函數調用了A代碼,結果進程異常退出了。 查看符號表,發現調用的A代碼,其實運行的是直接編譯進入main主函數的代碼,而不是B.so里面包含的A代碼。 而且比較 ...
2017-12-04 09:07 0 1574 推薦指數:
一次debug遇到的疑惑 某天發現一個程序有點問題。祭上print大法,在關鍵的 lib_func() 函數里添加 print 調試信息,重新編譯運行。 期望 print 出的信息一點都沒有,但是程序確確實實又執行過了 libfunc() ,因為除了添加的調試 print 沒有執行 ...
項目調試過程中遇到Linux環境下動態庫so中全局變量相互沖突問題,問題具體描述如下: 單個進程 A運行時需要加載兩個動態庫B.so與C.so ,這兩個動態庫均鏈接了靜態庫D.a。靜態庫 D.a存在全局變量且只能初始化一次。進程A加載B.so 正常,加載C.so 提示D.a 初始化 ...
jQuery中 $ 符號的沖突問題是常見問題之一。 在jQuery中, $是jQuery的別名,為了書寫方便,我們更習慣用$('#id')這一類的方式來書寫代碼。當同一頁面引用了jQuery多個版本或者jQuery與某些其他js庫產生沖突,控制台就會 ...
demangle過了的符號名稱; -D 打印動態符號; -l 使用對象文件中的調試信息打印出所在源 ...
的符號名稱; -D 打印動態符號; -l 使用對象文件中的調試信息打印出所在源文件及行號; -n ...
所在對象文件名稱; -C 輸出demangle過了的符號名稱; -D 打印動態符號; ...
最直接的就用 ldd + 可執行文件: 可以看到可執行文件需要哪些動態庫,以及在當前環境下實際連接到的路徑。 除了ldd,還有一些其它工具: readelf 都可以看file 查看文件類型strings 查看目標文件里所有可打印的字符串,或者非文本文件的 loadable ...
主要參考博客gcc創建和使用靜態庫和動態庫 對於熟悉windows的同學,linux上的靜態庫.a相當於win的.lib,動態庫.so相當於win的.dll. 首先簡要地解釋下這兩種函數庫的區別,參考《Linux程序設計》 1. 靜態庫也被稱為歸檔文件(archive,因此創建命令是ar ...