MinGW Ld создает конечный исполняемый файл нулевого размера после компоновки объектных файлов - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь связать объектные файлы, сгенерированные MinGW g cc, с ld.exe, поставляемым с MinGW, для создания окончательного 32-битного исполняемого файла на Windows 10 64-бит. Код более чем достаточно прост. У меня есть файл maindefined. c с основной функцией:

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

Для mainCRTStartup я использую пользовательский код запуска C nocrt0, который я нашел на GitHub, который утверждает полностью совместим с MinGW: https://github.com/matveyt/nocrt0, который анализирует аргументы командной строки и вызывает main (), предоставляя эти аргументы.

Я поместил этот код запуска nocrt0 c. c (поскольку я пытаюсь разработать простое консольное приложение) для файла с именем maincaller. c

Я создаю объектный файл для этих двух C источников через MinGW g cc командная строка

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

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

Я просмотрел код запуска nocrt0 и обнаружил, что он использует API GetCommandLine(), экспортированный kernel32.dll для Извлеките аргументы командной строки перед их синтаксическим анализом и предоставьте их main, поэтому во время соединения с ld я поставил 32-битную версию kernel32.dll на моем P C во входных данных

ld --verbose -o output.exe maincaller.o maindefined.o "c:\windows\syswow64\kernel32.dll"

Это исключает нерешенную внешнюю ошибку как ожидаемую. d, но конечный файл output.exe представляет собой файл нулевого размера, абсолютно без ввода. Ld verbose также не выводит никаких полезных ошибок. Что может быть не так? Хотелось бы помочь с этим

1 Ответ

0 голосов
/ 14 февраля 2020

Это оказалось глупой проблемой, но я хочу оставить это здесь независимо от того, кто будет регистрироваться позже. Антивирус Symante c на моем P C удалял содержимое всего двоичного файла после его успешного создания с помощью ld.exe. Поэтому, если вы делаете что-то из MinGW или связываете что-либо с какой-либо другой цепочкой инструментов, хорошей идеей будет отключить любое имеющееся у вас решение защиты от вирусов и доступа.

...