Рейтинг:1

проблема с компиляцией GCC

флаг es

Я только что скачал компиляцию GCC для C/C++. После компиляции командой gcc main.c -c -lGL -lGLU -lglut Я получаю ошибку разрешения, которую можно исправить, изменив разрешения. Затем я получаю эту ошибку: bash: ./main.o: невозможно выполнить двоичный файл: ошибка формата Exec. Вы поможете мне исправить это? Также, если это поможет, я использую C.

-Заранее спасибо

mchid avatar
флаг bo
Похоже, это может быть неправильная архитектура: https://askubuntu.com/q/648555. Что возвращает файл ./main.o? или если `main.o` не находится в текущем каталоге, найдите файл, а затем запустите команду `file` для `main.o`, чтобы показать, какой это файл.
mchid avatar
флаг bo
Возможно, он был скомпилирован для неправильной архитектуры, но могут быть и другие причины. Кроме того, вы установили GCC, запустив `sudo apt install build-essential`? Это рекомендуемый способ загрузки и установки GCC.
флаг hr
После компиляции **как** именно? Тот факт, что ваша команда создала файл `.o`, говорит о том, что вы добавили параметр `-c`, который подавляет ссылку на окончательный исполняемый файл.
Dequog avatar
флаг es
@mchid Idk Я забыл, как я установил компилятор gcc, но я установил пакет `build-essential` после, если это имеет значение
Dequog avatar
флаг es
@steeldriver Я обновил вопрос, указав именно ту команду, которую использовал.
флаг hr
@Dequog правильно - поэтому удалите `-c` (и при желании добавьте `-o progname`, если вы хотите, чтобы исполняемый файл назывался `progname`, а не по умолчанию `a.out`).
Dequog avatar
флаг es
@steeldriver теперь я получаю эту ошибку: `/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1. о: в функции _start': (.text+0x24): неопределенная ссылка на 'main' collect2: ошибка: ld вернул 1 статус выхода`
флаг hr
Действительно ли `main.cpp` содержит функцию `main`? Это **действительно** C или это C++ (на что указывает суффикс `.cpp`)? В последнем случае используйте `g++` вместо `gcc`. Если первое (C с суффиксом `.cpp`), вам может понадобиться добавить `-xc`, чтобы правильно направить gcc.
Dequog avatar
флаг es
извините, я хотел поместить `main.c`, и да, он содержит функцию `main()`, а команда `-xc` ничего не делает
waltinator avatar
флаг it
Вы загрузили компилятор C из источника, отличного от Ubuntu? Почему бы не использовать компилятор C из системы упаковки?
Dequog avatar
флаг es
@waltinator Я использовал компилятор c из системы упаковки.
mchid avatar
флаг bo
[Это помогает?] (https://stackoverflow.com/a/7965472)
Dequog avatar
флаг es
@mchid нет, потому что 1. я определил основную функцию 2. моя исходная команда имеет часть `-c`, которая вызывает другую проблему
флаг kn
Я не понимаю, зачем компилятору нужна загрузка. Насколько я понимаю, gcc встроен во все настольные версии Ubuntu.
Dequog avatar
флаг es
@NickT Эй, извини, что я так долго не отвечал, но компилятор gcc не был автоматически установлен для меня. Это как-то связано со мной, когда я использую LTS-версию?
флаг kn
Кажется, я задавал тот же самый вопрос в прошлом году. Мнения расходятся относительно того, был ли он встроен. См. https://askubuntu.com/questions/1276468/does-ubuntu-20-04-1-lts-not-come-with-a-c-compiler-by-default.
Dequog avatar
флаг es
Я просто забыл сохранить файл извините
ADBeveridge avatar
флаг lb
Когда я скомпилировал программу в Ubuntu, а затем переместил проект (он был основан на мезонах) в свой Raspberry Pi, появилось это предупреждение. Исправление состояло в том, чтобы восстановить.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.