[問題] 動態聯結的底層原理

看板C_and_CPP (C/C++)作者 (金屬製品)時間13年前 (2012/12/11 08:28), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串1/1
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
Windows 的話,搜尋 pwd 的 dll 不是正常的嗎
12/11 08:46, 1F

12/11 08:48, , 2F
而且 -L 只是告訴 linker 找額外的 path 吧
12/11 08:48, 2F

12/11 08:49, , 3F
用 ldd 去列只看得到需要 dll/so 的檔名不會包路徑
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
文章代碼(AID): #1GndumXW (C_and_CPP)
文章代碼(AID): #1GndumXW (C_and_CPP)