打开以前的一份老代码,在Visual Studio中编译之后发现无法启动,根本就没运行到程序入口点。

根据Entry Point Not Found, and other DLL Loading Problems一文的提示,可以使用GFlags utility来打开额外的调试信息:

  • 在Image File标签页
    • 输入目标exe的全名
    • 勾选Show loader snaps

然后调试器就会打印出更多信息,然后我找到了关键问题:

1d90:30e4 @ 145456375 - LdrpNameToOrdinal - WARNING: Procedure "__std_tzdb_delete_time_zones" could not be located in DLL at base 0x00007FF99B0B0000.

可惜Google不到__std_tzdb_delete_time_zones相关的信息,所以猜测是工具链或者依赖哪里出问题了,最后也没有真正解决。

根据Get reason that LoadLibrary cannot load DLL,也可以命令行调用GFlags:'/c/Program Files (x86)/Windows Kits/10/Debuggers/x64/gflags.exe' -i main.exe +sls

其他参考

(本篇完)

2021-06-27更新

今天又出现了以下问题:

27f8:2aa8 @ 00758203 - LdrpNameToOrdinal - WARNING: Procedure "__std_tzdb_delete_leap_seconds" could not be located in DLL at base 0x00007FFF1D8C0000.

然后终于找到原因了, 竟然是因为使用VS中还不成熟的C++ Module!

(更新完)