2013-05-15 6 views
3

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

./configure --host=powerpc-none-linux-gnuspe --prefix=/home/me/build_dir 
make 
make install 

Я использовал --prefix так, что make install не ставил выходы в моей файловой системы со всеми x86 LIBS. Я также попробовал запустить configure без --prefix и вместо этого задал переменную окружения DESTDIR перед запуском make install. Они, похоже, делают то же самое. Я хочу, чтобы у меня была возможность набрать /home/me/build_dir и поместить ее в корень файловой системы встроенной цели. Я надеюсь, что --prefix не просопил абсолютный путь на моей главной машине.

Затем я попытался пересечь скомпилировать приложение, которое использует эту библиотеку:

./configure --host=powerpc-none-linux-gnuspe --with-sysroot=/home/me/build_dir 

Я выбежала на 2 вещи. Сценарий configure успешно завершен, но первый make не удалось, поскольку он не смог найти один из заголовков. Он находится под /usr/include вместо /home/be/build_dir/usr/include. Должна ли опция --with-sysroot также модифицировать каталоги включения или я что-то упускаю?

Кроме того, я получаю предупреждение

libtool: link: warning: library libstdc++.la was moved 

Я получаю ощущение, что я пропустил что-то. Является ли это предупреждение чем-то, что я могу смело игнорировать или я где-то испортил?

Подводя итоги: 1) Есть ли разница между ./configure --prefix=x и make DESTDIR=x install? 2) Каков правильный способ обновления пути поиска для заголовков библиотеки? 3) Почему я получаю предупреждение о libstdC++, и о чем я должен беспокоиться?

ответ

3

Для вашей ситуации вы должны использовать DESTDIR. Значение --prefix будет означать, что результирующая программа будет установлена ​​в месте в --prefix. DESTDIR, с другой стороны, является чисто make install артефактом, он просто префиксы к началу каждого пути при его установке. Полученный продукт по-прежнему ожидает установки на месте --prefix. Если вы хотите установить результаты на целевом хосте, установите --prefix на место, куда оно пойдет, и используйте DESTDIR, чтобы выполнить его в другом месте.

Я считаю, что просто установить --sysroot в сценарии configure недостаточно, но я не уверен. Я думаю, что устанавливает sysroot в то время как configure работает, но он не устанавливает make-файл.

Что я обычно делаю, это создать оболочку сценария оболочки для компилятора, который вызывает реальный компилятор с помощью правильной опции --sysroot=dir, а затем использовать эту оболочку в качестве имени компилятора до configure. Это проще сделать, чем пытаться заставить все вызовы компилятора добавить флаг --sysroot извне.

Я не уверен насчет предупреждения libstdc++. libstdc++ является частью компилятора, а не частью sysroot ...?

ETA:

скриптом обертку я имею в виду создать сценарий под названием что-то вроде sysroot-gcc:

#!/bin/sh 
exec real-gcc --sysroot=/some/sysroot "[email protected]" 

, то вы можете запустить configure CC=sysroot-gcc. Вы можете сделать это как причудливое, как хотите; У меня есть общий скрипт, который анализирует имя ($0) и получает имя sysroot и имя инструмента (gcc, g++ и т. Д.), Чтобы я мог повторно использовать один скрипт для всех инструментов.

+0

Благодарим за полезную информацию. Я не уверен, что понимаю, что вы подразумеваете под оболочкой оболочки оболочки. – zmb

Смежные вопросы