GCC не будет компилироваться, дает множество ошибок из своих собственных библиотек даже по базовому коду

117
12

Мой друг посмотрел мой код и дал некоторые предложения по улучшению. Эти предложения должны работать, и мы сгладили все ошибки в самом коде, но, пытаясь скомпилировать даже базовый int main(), он генерирует кучу ошибок, связанных с чем-то в своих собственных библиотеках. Единственное, что изменилось, это то, что мы доработали код до так, чтобы было меньше повторяющихся утверждений, а также использовалось логическое значение вместо других.

Вот код прямо сейчас: http://pastebin.com/nG0Dr4h0

Вот ошибки:

E:\Utils\compile\files>gcc -Werror -Wall leapYear.c leapYear.exe
leapYear.exe:crt1.c:(.text+0x280): multiple definition of 'mainCRTStartup'

e:/utils/compile/c/gcc/bin/../lib/gcc/mingw32/4.7.1/../../../crt2.o:crt1.c:(.text+0x280): first defined here
leapYear.exe:crt1.c:(.text+0x2a0): multiple definition of 'WinMainCRTStartup'

e:/utils/compile/c/gcc/bin/../lib/gcc/mingw32/4.7.1/../../../crt2.o:crt1.c:(.text+0x2a0): first defined here
leapYear.exe:crt1.c:(.text+0x2c0): multiple definition of 'atexit'

e:/utils/compile/c/gcc/bin/../lib/gcc/mingw32/4.7.1/../../../crt2.o:crt1.c:(.text+0x2c0): first defined here
leapYear.exe:crt1.c:(.text+0x2d0): multiple definition of '_onexit'

e:/utils/compile/c/gcc/bin/../lib/gcc/mingw32/4.7.1/../../../crt2.o:crt1.c:(.text+0x2d0): first defined here
leapYear.exe:cygming-crtbegin.c:(.text+0x2e0): multiple definition of '__gcc_register_frame'

e:/utils/compile/c/gcc/bin/../lib/gcc/mingw32/4.7.1/crtbegin.o:cygming-crtbegin.c:(.text+0x0): first defined here
leapYear.exe:cygming-crtbegin.c:(.text+0x32c): multiple definition of '__gcc_deregister_frame'

e:/utils/compile/c/gcc/bin/../lib/gcc/mingw32/4.7.1/crtbegin.o:cygming-crtbegin.c:(.text+0x4c): first defined here
leapYear.exe:leapYear.c:(.text+0x334): multiple definition of 'main'

C:\Users\[REDACTED]\AppData\Local\Temp\ccKNWKLb.o:leapYear.c:(.text+0x72): first defined here
leapYear.exe:crt1.c:(.bss+0x4): multiple definition of '_argc'

e:/utils/compile/c/gcc/bin/../lib/gcc/mingw32/4.7.1/../../../crt2.o:crt1.c:(.bss+0x4): first defined here
leapYear.exe:crt1.c:(.bss+0x0): multiple definition of '_argv'

e:/utils/compile/c/gcc/bin/../lib/gcc/mingw32/4.7.1/../../../crt2.o:crt1.c:(.bss+0x0): first defined here

e:/utils/compile/c/gcc/bin/../lib/gcc/mingw32/4.7.1/crtbegin.o:cygming-crtbegin.c:(.text+0x45): undefined reference to '_Jv_RegisterClasses'
collect2.exe: error: ld returned 1 exit status

спросил(а) 2021-01-25T13:12:58+03:00 5 месяцев назад
1
Решение
63

Вы запрашиваете gcc для компиляции двух источников, одним из которых является exe (уже скомпилированный элемент). Таким образом, он обнаруживает много дублирования, поскольку exe уже содержит большую часть того, что он должен связывать с промежуточными объектами.

Измените вызов

E:\Utils\compile\files>gcc -Werror -Wall leapYear.c -o leapYear.exe

Чтобы сообщить GCC, что выходной файл является exe, который отключит его от исходных источников. Тогда он не будет пытаться добавить в реализации вызовов к набору входов, которые уже имеют реализации.

ответил(а) 2021-01-25T13:12:58+03:00 5 месяцев назад
45

Добавьте -c к исходному файлу ввода. Мы получаем эту ошибку, когда опция -c не используется для флагов компилятора. Как this-

gcc -Werror -Wall -c leapYear.c leapYear.exe

или

gcc -c leapYear.c -Werror -Wall leapYear.exe

ответил(а) 2021-01-25T13:12:58+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема