Вызов NASM из программы на C с использованием system () дает другой объектный код, чем вызов с использованием Bash

Я реализовал достаточно хороший оптимизирующий компилятор (для игрушечного языка) и натолкнулся на довольно загадочный сценарий. Я могу взять входной файл и произвести сборку из него, так что в этом отношении «компилятор» закончен. Если я возьму этот файл сборки, соберу его с помощью NASM и свяжу его с моей библиотекой поддержки времени выполнения с помощью G ++ (для среды выполнения требуется libstdc ++), я получу работающий исполняемый файл без ошибок. Тем не менее, я хотел бы иметь возможность компилировать в исполняемый файл в одной команде, поэтому я добавил несколько вызовов system моему компилятору, передав ТОЧНЫЕ ЖЕ КОМАНДЫ, которые я использовал в bash. Когда я запускаю компилятор, он, кажется, собирается правильно, но шаг компоновки (опять же с использованием g ++) завершается неудачно с undefined reference to main, Смущенный, я попытался связать вручную (без повторной сборки, поэтому я использовал объектный файл, созданный NASM, запущенным с systemи получил ту же ошибку. Если я соберусь заново, используя вывод сборки нового компилятора, у меня не возникнет проблем, из-за чего можно было бы поверить, что проблема заключается в NASM. Как я уже сказал, команды абсолютно одинаковы (я буквально скопировал и вставил их, чтобы убедиться после первого раза). Это переменные среды или что-то? В чем дело?

РЕДАКТИРОВАТЬ:
Я вручную собрал объектный файл, снова используя ту же команду, что и в компиляторе, и я сделал vim diff между ними. Генерируемый компилятором, кажется, содержит только заголовок ELF.

РЕДАКТИРОВАТЬ 2:
Скриншот различийСкриншот

РЕДАКТИРОВАТЬ 3:
Я пытался с помощью system вызвать Perl-скрипт, который, в свою очередь, вызовет NASM и G ++, все равно не повезло.

2

Решение

Починил это! Это был файл, который не был сброшен из-за состояния гонки. Спасибо за помощь, высоко ценится.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]