我有一個使用uclibc在MIPS CPU上運行的多進程程序,它使用gcc 4.5.3進行編譯。 其中一個進程(它是名稱「電視」)需要鏈接到一個共享庫(libtest.so),這也是我寫的。 「電視」過程是用C++編寫的,而libtest.so是用C語言編寫的。我也從libtest.so轉儲了elf頭文件,它有PIC和CPIC標誌集,所以我認爲庫的創建沒問題。如何調試加載共享庫
當我嘗試運行該程序時,除「電視」過程外,所有進程都可以正常啓動。沒有錯誤消息。當我使用ps來檢查它的狀態時,它已經成爲殭屍進程。
我曾嘗試以下
如果我從聯工藝去除libtest.so,並刪除該libtest.so任何引用,「看電視」的過程可以在沒有任何問題運行。
如果我刪除了任何對libtest.so的引用,但在鏈接過程中保留libtest.so,「電視」過程仍然不會運行。
我試圖使用LD_DEBUG = all來調試,但它不能在我的電路板上工作,因爲沒有有效的輸出。
所以我猜想有一些錯誤,當ld嘗試加載libtest.so時,「電視」過程開始。但我不知道如何調試?我應該如何確定libtest.so的哪個部分導致問題?
任何建議是值得歡迎的。提前致謝。
你試過'strace'嗎? – mattn
嗯,非常有趣的問題。你似乎在控制libtest方面有巨大的優勢 - 所以你可以嘗試用一個簡單的過程(而不是電視)重現問題,然後慢慢地將所有東西從libtest中刪除,直到問題消失,然後重新添加,直到你可以查明問題(二進制搜索風格)。除非問題證明是可重現的*只有電視和未經修改的libtest.so,在這種情況下,祝你好運? – Cameron
@mattn我已經使用strace並找出我正在獲取SIGBUS。現在我要試着找出這是什麼原因。非常感謝你的建議。 – SSC