[英]Can an import library contain both stubs and static code at the same time?
當使用mingw-w64
工具鏈時,我看到鏈接器正在鏈接存根庫,而不是直接鏈接。 例如,鏈接器將選擇鏈接到libkernel32.a
,這是一個導入庫。
這激發了我的好奇心,並提出了以下問題:
libws2_32.a
已編譯源代碼。 我對其進行了反匯編,發現它既包含存根又包含代碼-好像它是導入庫和靜態庫的混合。 在MinGW環境之外通常是否可以實現-包含包含有效代碼的導入庫? 來源: https : //github.com/mirror/mingw-w64/tree/master/mingw-w64-crt/libsrc/ws2tcpip
libws2_32.a
則鏈接器推斷出運行時DLL是ws2_32.dll
。 這是特定於實現的功能還是存在用於存儲和定位原始DLL名稱的約定? 出於技術原因,導入庫不能包含靜態鏈接的入口點。
您可能想檢查一下它是否正常工作,但是一種可能使您到達那里的方法是對導入庫執行一個后處理步驟,以向其中添加靜態鏈接對象。
此頁面包括以下注意事項:
您可以使用LIB執行以下庫管理任務:
- 要將對象添加到庫中,請為現有庫指定文件名,並為新對象指定文件名。
如果此操作不會刪除DLL導入信息,則應允許您創建此類庫。 我現在正在Mac上工作,因此我無法在家中Windows系統上訪問VS來進行確定的測試。
至於鏈接器如何知道所涉及的DLL的名稱,它被嵌入在導入庫中,並從那里被嵌入到最終的EXE中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.