[問題] 動態聯結的底層原理
compile在lib內的libFunc.dll檔:
$gcc a.o -L./lib -lFunc -o a
$./a (正確執行)
然後
$mv ./lib/libFunc.dll .
所以lib裡面是空的
接著$./a
竟然也正確執行 表示放在a.exe內的placeholder會追蹤libFunc.dll的位置耶
那麼如果把libFunc.dll刪除 -> $./a.exe (找不到)
接著我重新產生一個libFunc.dll放入./lib
$./a (正確執行)
我不太懂那個placeholder的原理到底是什麼 有沒有compile原理高手了解這個東西?
為什麼我把我想要用的library四處移動, 執行檔會跟著追蹤
而如果這時候在lib內放入同一個libFunc.dll檔名,但執行內容不同(原先的libFunc.dll
被我移動到其它的資料夾, 這時候./lib裡面放的雖然是名libFunc.dll 但內容不同)
執行檔根本就不會對這個路徑內的檔案去執行, 反而會去對那個出外的遊子去執行?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.249.82.154
推
12/11 08:46, , 1F
12/11 08:46, 1F
→
12/11 08:48, , 2F
12/11 08:48, 2F
→
12/11 08:49, , 3F
12/11 08:49, 3F
→
12/11 11:40, , 4F
12/11 11:40, 4F
→
12/11 11:41, , 5F
12/11 11:41, 5F
推
12/11 20:27, , 6F
12/11 20:27, 6F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章