Почему ошибка в кросс-компиляции Arm Linux GCC? - PullRequest
2 голосов
/ 16 января 2012

Я пытаюсь использовать AppWeb, и я написал очень простую программу для встраивания AppWeb в мое приложение, она использует функцию из библиотеки AppWeb.

#include <appweb/appweb.h>
int main(int argc, char** argv)
{
    return maRunWebServer("appweb.conf");
}

Я не знаю, когда я компилирую с помощью gcc(или cc), оно успешно скомпилировано.Но, когда я пересекаю компиляцию на архитектуру Arm, я получаю ошибку.Это мой Makefile:

CC = gcc

LIBS = lib

FLAG = -lappweb -lmpr

TEST_TARGET = embed-appweb
OBJS = embed-appweb

all: clean compile

compile: run
    $(CC) -Wall -L$(LIBS) $(FLAG) -o $(TEST_TARGET) $(OBJS).o

run:
    $(CC) -Wall -L$(LIBS) $(FLAG) -c $(OBJS).c

clean:
    @rm -rf $(TEST_TARGET) $(TEST_TARGET).trc *.o *~
    @echo "Clean complete"

Я был заменен "CC = gcc" на "CC = arm-linux-gcc" в oder для кросс-компиляции.Ошибка в моей проблеме:

arm-linux-gcc -Wall -Llib -lappweb -lmpr -c embed-appweb.c
embed-appweb.c:1:27: error: appweb/appweb.h: No such file or directory
embed-appweb.c: In function 'main':
embed-appweb.c:4: warning: implicit declaration of function 'maRunWebServer'
make: *** [run] Error 1

, и я уверен, что библиотека "libappweb.so" существовала в моей папке "lib"

Кто-то может сказать мне, почему этоесть ошибка?и дайте мне совет?

Спасибо,

Ответы [ 3 ]

2 голосов
/ 16 января 2012

Знаете ли вы, как использовать параметр -I для gcc?

Ошибка, которую вы получаете, связана с тем, что компилятор (gcc) может найти нужные файлы

Самое простое решение - изменить FLAG в вашем Makefile:

FLAG = -lappweb -lmpr

на

FLAG = -lappweb -lmpr -I/path/to/my/headers

Конечно, вы должны изменить / путь / на /мои / заголовки к истинному пути, где находятся ваши заголовки.

1 голос
/ 16 января 2012

Вы должны установить (или символически связать) заголовок appweb в дерево включения arm-linux-gcc.

Например, команда arm-linux-gcc для одной из моих систем:

$ which arm-linux-gcc
/home/eldk/usr/bin/arm-linux-gcc

Итак, включаемые файлы , используемые компилятором:

 $ arm-linux-gcc -print-search-dirs
install: /home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/
programs: =/home/eldk/usr/bin/../libexec/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../libexec/gcc/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/:/usr/libexec/gcc/arm-linux-gnueabi/4.2.2/:/usr/libexec/gcc/arm-linux-gnueabi/:/home/eldk/usr/libexec/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/
libraries: =/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/:/usr/libexec/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/:/home/eldk/usr/../arm/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/../arm/lib/:/home/eldk/usr/../arm/usr/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/../arm/usr/lib/
0 голосов
/ 02 февраля 2012

У вас есть две проблемы:

  1. Ваш поисковый путь для включения (как уже указано sessyargc.jp и wallyk).
  2. Путь поиска в вашей библиотеке.

Когда вы компилируете, используя gcc, он будет использовать ваши настройки gcc для поиска заголовков и библиотек внутри собственной цепочки инструментов. По умолчанию это будет что-то вроде "/ usr / include" и "/usr/lib".

Когда вы компилируете с arm-linux-gcc, как это делали ранее gcc, он будет использовать ваши arm-linux-gcc конфигурации для поиска заголовков и библиотек внутри своей собственной цепочки инструментов. Это может быть где угодно, в зависимости от вашей цепочки инструментов (то есть "/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2 / ..." для Wallyk).

Обратите внимание, что у вас есть два разных набора инструментов, и у каждого есть свои файлы.

Вы не можете связать библиотеку, созданную для "x86", в двоичный файл ARM. Они несовместимы!

gcc ссылки gcc libs, arm-linux-gcc ссылки arm-linux-gcc libs.

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

SO

Вы должны установить свой кросс-компилированный AppWeb для ARM , прежде чем приступать к компиляции примера приложения.

После этого у вас будет appweb/appweb.h и -lappweb, достижимые вашей цепочкой инструментов.

Пожалуйста, сообщите нам, если вам нужна помощь о том, как кросс-компилировать AppWeb. Это должно быть README в источниках, рассказывающих, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...