Проблема с ссылками при кросс-компиляции в ARM - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь получить приложение "Hello World", скомпилированное для цели ARM. Я кросс-компиляции с использованием gcc на Ubuntu / VMWare. Если я скомпилирую для хост-машины, он работает нормально. Когда я компилирую для цели, я получаю эту ошибку:

/root/picokernel/toolchain/arm-eabi/lib/libcs3hosted.a(hosted-sbrk.o): In function `_sbrk':
sbrk.c:(.text+0x74): undefined reference to `__cs3_heap_limit'
/root/picokernel/toolchain/arm-eabi/lib/libcs3hosted.a(hosted-sbrk.o):(.data+0x0): undefined reference to `__cs3_heap_start'
make: *** [HelloWorld] Error 1

Так что я думаю, что мне нужно что-то связать - возможно, у моего набора инструментов нет нужных библиотек? Я смог собрать ядро, поэтому подумал, что оно завершено. Спасибо! Это целевая плата. - работает Angstrom или Android.

Makefile

CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)ld 
CROSS_LIB1=/root/picokernel/toolchain/arm-eabi/lib 
CROSS_LIB2=/root/picokernel/toolchain/lib/gcc/arm-eabi/4.2.1
CFLAGS=-Wall
LDFLAGS= -L$(CROSS_LIB1) -L$(CROSS_LIB2) -lc -lcs3hosted -lg -lgcc --entry main
HelloWorld: HelloWorld.o 
    $(LD) HelloWorld.o $(LDFLAGS)

чистый: rm -f HelloWorld HelloWorld.o

Программа

#include <stdio.h>

int main(int argc, char **argv)
{
   printf("Hello World\n");
   return 0;
}

Ответы [ 4 ]

2 голосов
/ 22 июня 2011

Должен сказать, это подозрительно: -nostdlib

Как насчет не с использованием этого флага?

1 голос
/ 01 июля 2011

Хорошо - наконец-то с этим разобрался, взял инструментальную цепочку из источника здесь:

http://www.codesourcery.com/sgpp/lite/arm/portal/release1803

Hello World прекрасно работает! Спасибо за предложения

1 голос
/ 22 июня 2011

Ядро не использует библиотеку времени выполнения C, поскольку библиотека выполняет многие, если не большинство, вещи, не разрешенные кодом ядра, такие как файловый ввод-вывод и выделение памяти.

Обычно у вас нетуказать библиотеку вообще.gcc предполагает правильную вещь.Попробуйте удалить настройку LDFLAGS в целом: держу пари, она работает лучше.

0 голосов
/ 29 июня 2011

Есть ли в используемой вами цепочке инструментов библиотека с именем "lcs3arm"? Если это так, попробуйте добавить это в список. Вы также можете попробовать "-lcs3" сам

Из интереса, какую версию GCC вы используете здесь? (т.е. какой выпуск CodeSourcery)

...