使用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名称的约定?答案 0 :(得分:0)
从技术上讲,导入库不能包含静态链接的入口点。
您想检查一下它是否正常工作,但是一种可能使您到达那里的方法是对导入库执行后处理步骤,以向其中添加静态链接对象。
This page包括以下注释:
您可以使用LIB执行以下库管理任务:
- 要将对象添加到库中,请为现有库指定文件名,并为新对象指定文件名。
提供此操作不会删除DLL导入信息,它应允许您创建这样的库。我现在正在Mac上工作,因此我无法在家中的Windows系统上访问VS来进行确定的测试。
关于链接器如何知道所涉及的DLL的名称,它被嵌入在导入库中,并从那里被嵌入到最终的EXE中。