簡體   English   中英

導入庫可以同時包含存根和靜態代碼嗎?

[英]Can an import library contain both stubs and static code at the same time?

當使用mingw-w64工具鏈時,我看到鏈接器正在鏈接存根庫,而不是直接鏈接。 例如,鏈接器將選擇鏈接到libkernel32.a ,這是一個導入庫。

這激發了我的好奇心,並提出了以下問題:

  1. 參見下文,發現libws2_32.a已編譯源代碼。 我對其進行了反匯編,發現它既包含存根又包含代碼-好像它是導入庫和靜態庫的混合。 在MinGW環境之外通常是否可以實現-包含包含有效代碼的導入庫?

來源: https//github.com/mirror/mingw-w64/tree/master/mingw-w64-crt/libsrc/ws2tcpip

  1. 較小的警告問題:鏈接器之間是否存在用於確定運行時DLL名稱的一致方法? 例如,如果我鏈接到libws2_32.a則鏈接器推斷出運行時DLL是ws2_32.dll 這是特定於實現的功能還是存在用於存儲和定位原始DLL名稱的約定?

出於技術原因,導入庫不能包含靜態鏈接的入口點。

您可能想檢查一下它是否正常工作,但是一種可能使您到達那里的方法是對導入庫執行一個后處理步驟,以向其中添加靜態鏈接對象。

此頁面包括以下注意事項:

您可以使用LIB執行以下庫管理任務:

  • 要將對象添加到庫中,請為現有庫指定文件名,並為新對象指定文件名。

如果此操作不會刪除DLL導入信息,則應允許您創建此類庫。 我現在正在Mac上工作,因此我無法在家中Windows系統上訪問VS來進行確定的測試。

至於鏈接器如何知道所涉及的DLL的名稱,它被嵌入在導入庫中,並從那里被嵌入到最終的EXE中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM