Процесс компиляции распределяется в 4 этапа:Ошибка при использовании GCC Linker под MinGW
- Препроцессор -Expanding Макросы и файлы заголовков.
- Компилятор -Converts исходный код ассемблере
- Assembler -Converts ассемблера в машинный код
- Linker -links машинный код, чтобы сформировать единый исполняемый файл.
Предполагая, что мы исходный код имя test.cpp, что нам нужно собрать поэтому команды, необходимые будут:
- каст test.cpp> test.i [Выход й файл, расширение заголовка файла и макросы]
- г ++ -S test.i [выход .с файла, язык ассемблера файл]
- , как -o test.o test.s [выход .o файл, зависит от машины машинный код]
- л.д. -o test.exe test.o [выход .exe файл, исполняемый который может быть запущена непосредственно с помощью операционной системы]
Так что проблема находится на последнем этапе я получаю следующее сообщение об ошибке :
test.o: test.cpp :(текст + 0x32):. неопределенная ссылка на __mingw_vprintf' test.o:test.cpp:(.text+0x4a): undefined reference to
__main' test.o:. test.cpp :(текст + 0x75): неопределенная ссылка на std::ios_base::Init::~Init()' test.o:test.cpp:(.text+0xa5): undefined reference to
станд :: ios_base :: Init :: Init() ' test.o: test.cpp :(. text + 0xb1): неопределенная ссылка на atexit' ld: test.o: bad reloc address 0x0 in section
.pdata' ld: окончательная ссылка не выполнена: неверная операция
Примечание. Да, мы можем избежать этих шагов, просто используя «g ++ test.cpp», чтобы получить исполняемый файл a.exe, но цель состоит в том, чтобы понять каждый шаг процесса сборки.
Вы были членом в течение 11 месяцев в соответствии с вашим профилем. Вы должны лучше знать, как задавать (и форматировать) вопросы – UnholySheep
Где вы связываете стандартную библиотеку C++ (в более общем плане - время выполнения вашей инструментальной цепочки)? Почему вы вызываете 'ld' напрямую? Какова ваша цель? –
@UnholySheep: согласен! я перефразирую. – Vickey