2011-08-24 23 views
4

背景:如何在Android上的動態鏈接器中啓用調試輸出?

我的應用程序無法在鏈路運行階段,並得到了以下信息:

link_image [1995] ... lib1.so
不能鏈接可執行

該應用取決於幾個動態庫如下:

應用程序需要lib1,lib1 dlopen lib2,並且在lib1中有應用程序(全局變量)導出的符號。

我已經測試了一個簡單的程序lib2是好的。所以我認爲失敗是因爲鏈接階段的lib1導致的(我可以保證應用程序需要的所有其他庫位於當前目錄中,並且「./」已添加到LD_LIBRARY_PATH。我也嘗試將所有該庫到/ System/lib目錄)

問:

  1. 我怎樣才能使連接器的調試輸出以獲得詳細的錯誤信息?
  2. 還有其他建議嗎?

EDIT1: 後一些更多的測試,似乎鏈接錯誤是由於由lib1內引用全局符號這是在main.c中定義

的Android是否需要額外的構建標誌,以使全球參考var主要?

+0

沒有人回答這個問題嗎? –

回答

1

您必須重新編譯。這裏抓住合適(分支,標籤)來源:

https://github.com/android/platform_bionic/tree/master/linker

在Android.mk,你想將它設置爲1:

# Set LINKER_DEBUG to either 1 or 0 
# 
LOCAL_CFLAGS += -DLINKER_DEBUG=0 

如果你想要去下,看看TRACE ()和DL_ERR()。如您所見,TRACE()是預處理器定義的,因此可以編譯出來。否則,您可能已經快速修補了debug_verbosity或其檢查的自己的值。

相關問題