作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題[問題] export dll時 lib中symbol的問題
時間Wed Mar 13 11:38:54 2013
平台是在VC
大家好
請教各位一個link的問題
我現在在某平台呼叫一個API
例如
ShellExecuteEx(NULL);
出現link error
Error 9 error LNK2001: unresolved external symbol __imp_ShellExecuteExW
當然我知道一定是lib沒加入 找不到這symbol
但我的疑問是
為啥他會直接顯示__imp版本找不到?
而不是說_ShellExecuteEx@4找不到?
原本是懷疑mangling問題 他不知道用什麼機制會把function name 翻成_imp prefix...
但我覺得沒道理
所以我把PC版本的lib dump出來 確實有兩個symbol
__imp__ShellExecuteEx@4
_ShellExecuteExA@4
所以我覺得他會不會是實作寫
ShellExecuteEx(...)
{
imp__ShellExecuteEx(...);
}
但若是這樣 我把這平台所有的lib dump symbol出來
至少要會有_ShellExecuteExA@4 而沒有__imp__ShellExecuteEx@4 , 我的想法才應該沒
錯~~~
現在就很不解這個問題
但win32 的dll好像都是這樣設計
常常看到_imp版本開頭的unresolved...
仔細想想卻不太明白為啥是找不到_imp版本...
請教各位
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.147.15.66
→ LPH66:理論上 Windows API 的話應該要有一個 lib 裡面是這些東西 03/13 12:40
推 lausai:這個程式設計師自我修養裡面有講得很清楚喔~ 03/13 12:55
→ QQ29:修養我忘記討論windows那塊了,修養看的好辛苦啊,對我來講好 03/13 13:09
→ QQ29:深……我再翻翻看 03/13 13:10
→ QQ29:請問修養第幾頁有提到呢? 我翻第九章沒提到這耶@@ 03/13 14:17
推 lausai:手邊沒書 記得好像是在講 dll 重定位的前面 建議看仔細點~ 03/13 14:40
→ firose:記得是用來明確指出它是輸入函式,可以直接對應 IAT 呼叫 03/13 18:00