2010-10-05 30 views
10

鏈接器如何知道在運行時應該解析哪些符號?特別是我感興趣的是什麼信息共享對象文件攜帶指示鏈接器在運行時解析符號。動態符號解析如何在運行時工作,即可執行文件將如何查找符號,以及如果定義了可找到的具有相同名稱的多個符號?鏈接器如何知道在運行時應該解析哪些符號?

如果文件只是靜態鏈接,然後在運行時作爲共享庫的一部分動態鏈接,會發生什麼?可執行文件將使用哪個符號?換句話說,是否可以通過將這些符號鏈接到共享庫中來重寫可執行文件中的符號?

有問題的平臺是SUN OS。

+0

每個運行時間都不相同。你必須對平臺更加具體。 – 2010-10-05 13:33:02

回答

1

看看這篇文章從Linux Journal。欲瞭解更多信息 - 可能特別與Windows,AIX,OSx等有關 - 我會推薦維基百科文章Linker (computing)及其中的參考資料。

2

嘗試下面的鏈接。我希望這回答你的問題

http://www.linuxjournal.com/article/6463

+0

:O)打我吧。我在我的回答中引用了同一篇文章。提高速度。 – 2010-10-05 13:10:11

+0

我實際上使用這篇文章作爲從C++編程開始的人的例子,並且非常有效。 – Vaibhav 2010-10-05 13:14:00

+0

如果文件僅以靜態方式鏈接**,會發生什麼情況,但在運行時將其作爲共享庫的一部分動態鏈接?可執行文件將使用哪個符號?換句話說,是否可以通過將這些符號鏈接到共享庫中來重寫可執行文件中的符號? – Leonid 2010-10-05 13:35:31

0

如果文件是靜態鏈接的,則沒有運行時間分辨率可言。如果共享對象動態地或靜態地鏈接到同一個庫,鏈接到庫的版本只會影響在庫中執行的代碼。如果您鏈接到不兼容的同一庫的兩個不同版本並來回移動數據,則會導致問題。

相關問題