近年来,我观察到 MSVC 链接器直到版本 11(Visual Studio 2012,_MSVC_VER 1700)默认将导入数据表与 .rdata 部分合并。从链接器版本 12(Visual Studio 2013,_MSVC_VER 1800)开始,此表被移至独立部分 .idata。我试图让这些较新的链接器继续将导入数据与 .rdata 合并,但没有成功(例如,选项 /merge:.idata=.rdata
导致错误消息 fatal error LNK1272: cannot将“.idata”与任何部分合并
)。
偶然发现了PySide2 (version 5.13.0)的可执行文件,显然是使用链接器版本 14.15 创建的,但它再次将导入表与 .rdata 合并。这让我非常惊讶,现在我问自己:
如何让最新的 MSVC 链接器将导入表与 .rdata 合并?
顺便说一句:这与解决任何问题无关。我只是好奇。
最佳答案
似乎是我自己造成了我的困惑:很久以前我就开始使用 /merge:.rdata=.text
开关构建我的所有项目。现在区别对待的正是这个开关。对于较旧的链接器,导入表首先与 .rdata
合并。然后 /merge:.rdata=.text
开关仍然可以将 .rdata
与 .text
合并。对于较新的链接器,开关 /merge:.rdata=.text
似乎首先被处理。当链接器随后搜索导入表的存储位置时,.rdata
不再存在。然后必须为此表创建 .idata
部分。
免责声明:我对此没有“证据”。这些只是我根据观察得出的结论。
关于qt - 如何使最近的 MSVC 链接器将导入数据与 .rdata 部分合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57424301/