咨詢網路大神來解決,不勝感激!
vxWorks系統下的一個RTP需要加載動態庫A.so,而A.so需要加載B.so,在硬體重啟后有時出現:In function _rtld_dlopen -- rtld.c:672 *old_obj_tail == obj -- assertion failed,有時又是可以正確加載的,多重啟幾次就會出現或者拷貝之前編譯相同的RTP到tffs0中出現的概率更大。
其中:
RTP的linker配置增加了 -rpath /tffs0;
handle = dlopen("/tffs0/lib/A.so", RTLD_NOW);
A.so和B.so的linker配置均增加了-WL, -Xshared -WL, -XPIC -WL, -XDynamic;這兩個.so均放置在/tffs0/lib中,而libc.so.1放在/tffs0下。
A.so中handle = dlopen("/tffs0/lib/B.so", RTLD_NOW);
uj5u.com熱心網友回復:
今天試驗在RTP中直接空加載,而不參考handle (handle = dlopen("/tffs0/lib/B.so", RTLD_NOW);), A.so還是保持原來相同的位置執行handle = dlopen("/tffs0/lib/B.so", RTLD_NOW); 這樣硬體不再出現例外,從這里推測出:RTP可以加載A.so和B.so,若B.so提前在RTP中加載了,則A.so可以加載B.so;若不提前加載,則加載例外,難道是A.so沒有鏈接B.so成功?轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/37492.html
標籤:VxWorks開發
上一篇:C++基礎(五)結構體
