Я пишу программное обеспечение для процессора Cortex-A8, и мне нужно написать код сборки ARM для доступа к определенным регистрам. Я использую компиляторы gnu и связанные цепочки инструментов, эти инструменты установлены на плате процессора (Freescale i.MX515) с Ubuntu. Я подключаюсь к нему со своего хост-компьютера (Windows) с помощью WinSCP и терминала PuTTY.
Как обычно, я начал с простого проекта на C, содержащего main.c и functions.s. Я компилирую main.c, используя GCC, собираю функции, используя as и link< /strong> сгенерированные объектные файлы, используя еще раз GCC, но во время этого процесса я получаю странные ошибки.
Важный вывод —
Тем временем я обнаружил, что мой ассемблерный код может иметь некоторые проблемы, потому что, когда я собираю его по отдельности с помощью команды as -o functions.o functions.s
и пытаюсь запустить сгенерированный functions.o с помощью команды ./functions.o
, оболочка bash не распознает это файл как исполняемый файл (при нажатии вкладки functions.o не выбирается/PuTTY не выделяет файл).
Кто-нибудь может подсказать, что здесь происходит? Есть ли какие-либо конкретные параметры, которые я должен отправить в GCC в процессе связывания? Ошибки, которые я вижу, странны и находятся за пределами моего понимания, я не понимаю, о чем говорит GCC.
Я вставляю сюда содержимое main.c, functions.s, Makefile и список ошибок.
Помогите, пожалуйста!!!
Последние ошибки, добавленные после того, как makfile был отредактирован, как предложили ребята здесь -
ubuntu@ubuntu-desktop:~/Documents/Project/Others/helloworld$ make
gcc -c -mcpu=cortex-a8 main.c
as -mcpu=cortex-a8 -o functions.o functions.s
gcc -o hello main.o functions.o
functions.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o:init.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [hello] Error 1
main.c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}
функции
* Main program */
.equ STACK_TOP, 0x20000800
.text
.global _start
.syntax unified
_start:
.word STACK_TOP, start
.type start, function
start:
movs r0, #10
movs r1, #0
.end
Создать файл
all: hello
hello: main.o functions.o
gcc hello -o main.o functions.o
-- привет был включен сюда после того, как его предложили ребята из stackoverflow, но проблема все еще сохраняется, я все еще получаю те же ошибки.
main.o: main.c
gcc -c -mcpu=cortex-a8 main.c
functions.o: functions.s
as -mcpu=cortex-a8 -o functions.o functions.s
Ошибки
ubuntu@ubuntu-desktop:~/Documents/Project/Others/helloworld$ make
gcc -c -mcpu=cortex-a8 main.c
as -mcpu=cortex-a8 -o functions.o functions.s
gcc -o main.o functions.o
functions.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o:init.c:(.text+0x0): first defined here
/usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o: In function `_start':
init.c:(.text+0x30): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [hello] Error 1
init.o
неявно связан и уже содержит символ_start
. Однако это, вероятно, другая проблема с отсутствующимmain()
. - person Clifford   schedule 19.04.2010