MinGW Ld在链接目标文件后创建零大小的最终可执行文件



我正在尝试将 MinGW gcc 生成的对象文件与 MinGW 提供的 ld.exe 链接,以在 Windows 32 上创建最终的 64 位可执行文件。代码非常简单。我有一个带有主函数的 maindefined.c 文件:

void main(int argc, char **argv) {}

对于mainCRTStartup,我正在使用我在GitHub上找到的自定义C启动代码nocrt0,该代码声称与MinGW完全兼容: https://github.com/matveyt/nocrt0 解析命令行参数并通过提供这些参数调用 main((。

我已经把这个启动代码nocrt0c.c(因为我正在尝试开发一个简单的控制台应用程序(放在一个名为maincaller.c的文件中。

我正在通过 MinGW gcc 命令行为这两个 C 源创建对象文件

gcc -g -O -c maincaller.c -m32

gcc -g -O -c maindefined.c -m32

我查看了nocrt0启动代码,发现它使用kernel32导出的GetCommandLine()API.dll在解析它们并将其提供给main之前获取命令行参数,因此在与ld链接期间,我也在我的PC上提供了32位版本的kernel32.dll输入中

ld --verbose -o output.exe maincaller.o maindefined.o "c:windowssyswow64kernel32.dll"

这不会像预期的那样引发未解决的外部错误,但生成的最终输出.exe是一个完全没有输入的零 kb 文件。Ld verbose 也不会发出任何有用的错误输出。可能出现什么问题?希望得到一些帮助

事实证明这是一个愚蠢的问题,但我想把它留在这里,不管以后有人签到。我的PC上的赛门铁克防病毒软件在ld.exe成功创建整个二进制文件后删除了整个二进制文件的内容。因此,如果您正在执行任何与任何其他工具链相关的 MinGW 或链接,一个好主意是禁用您拥有的任何防病毒/访问保护解决方案。

最新更新