繁体   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