2012-09-09 27 views
3

假設我有一個進程X,然後它已經將一些共享庫Y加載到其地址空間中。然後我設法將這個庫Y與一個不同的版本Yprime交換,對這個過程有什麼影響?在運行時交換鏈接的共享庫

+2

您是在運行時手動加載庫,還是加載程序加載它,因爲它鏈接? http://www.kernel.org/doc/man-pages/online/pages/man3/dlsym.3.html –

+0

第二個選項。 – earlence

+0

我的答案http://stackoverflow.com/a/12322672/841108可能部分與您的問題相關。 –

回答

0

沒有效果。加載程序會將程序庫保持打開狀態,直到程序結束(或直到通過dlclose(3)卸載程序庫),這意味着它仍然使用相同的(現在已刪除的)程序庫,因爲它的程序塊仍然存在於磁盤上。

+0

如果在原地覆蓋庫文件會怎麼樣? – lanzz

+1

@lanzz:然後未定義的行爲結果。 –

+0

是嗎?一旦庫被加載到內存中,我就不明白爲什麼原始磁盤塊會被重新讀取。還是庫文件直接映射? – boycy