./configure --host=${CROSS_COMPILE_HOST} ...
Вам нужно установить как --build
, так и --host
из-за ошибки Autoconf. Предполагая, что вы строите для ARMv7l, что-то вроде:
./configure --host=$(config.guess) --build=armv7l-unknown-linux-gnueabihf
Следующее выглядит нормально для меня, если предположить, что /home/xport/usr/local/lib/pkgconfig
является допустимым, а /home/xport/usr/local
является расположением файлов include/
и lib/
для арки.
export PKG_CONFIG_PATH="/home/xport/usr/local/lib/pkgconfig"
Я не уверен в том, что следует. Также отсутствует --build
. И я привык видеть --sysroot
при кросс-компиляции:
./configure --host=${CROSS_COMPILE_HOST} \
--enable-lib64=no --without-kernel-modules --without-pam --disable-vgauth \
--without-x --without-gtk3 --without-gtk2 --without-gtkmm3 --without-gtkmm \
--enable-resolutionkms=no --enable-deploypkg=no
CFLAGS
и CXXFLAGS
, вероятно, должны включать --sysroot
. Может быть, что-то вроде:
./configure --host=$(config.guess) --build=armv7l-unknown-linux-gnueabihf \
--sysroot="/home/xport/usr/local" --enable-lib64=no --without-kernel-modules ...
Or:
CFLAGS="--sysroot=/home/xport/usr/local" \
CXXFLAGS="--sysroot=/home/xport/usr/local" \
./configure --host=$(config.guess) --build=armv7l-unknown-linux-gnueabihf \
--enable-lib64=no --without-kernel-modules ...
DESTDIR
предназначен для постановки. Это выглядит нормально:
make install DESTDIR=/home/xport/
Если вы собираетесь запускать из каталога /home/xport/
, вам следует рассмотреть возможность добавления следующего в LDFLAGS
:
# 64-bit Fedora
-Wl,--enable-new-dtags -Wl,-R,'$$ORIGIN/../lib64'
# Most others
-Wl,--enable-new-dtags -Wl,-R,'$$ORIGIN/../lib'
Так что, может быть, что-то вроде:
CFLAGS="--sysroot=/home/xport/usr/local" \
CXXFLAGS="--sysroot=/home/xport/usr/local" \
LDFLAGS="-Wl,--enable-new-dtags -Wl,-R,'$$ORIGIN/../lib'" \
./configure --host=$(config.guess) --build=armv7l-unknown-linux-gnueabihf \
--enable-lib64=no --without-kernel-modules ...
Пути запуска на основе $ORIGIN
— это то, что делает поэтапную установку с DESTDIR
эффективной.
Двойной знак доллара в $$ORIGIN
связан с файлами Makefile. Двойной знак доллара — это способ избежать знака доллара, чтобы он правильно проходил через make-файл.
Также см. Как правильно включить аргумент компоновщика -Wl,-rpath,$ORIGIN в Makefile?
config.guess
предоставляет вам триплет Autoconf:
$ /usr/share/libtool/build-aux/config.guess
x86_64-pc-linux-gnu
Если у вас нет пути config.guess
, проверьте его в /usr/share
:
$ find /usr/share -name config.guess
/usr/share/misc/config.guess
/usr/share/libtool/config/config.guess
/usr/share/automake-1.14/config.guess
Также см. 2.2.8 Cross-Compilation в руководстве Autoconf. :
Кросс-компиляция — это сборка на одной платформе бинарного файла, который будет работать на другой платформе. Говоря о кросс-компиляции, важно различать платформу сборки, на которой выполняется компиляция, и хост-платформу, на которой ожидается запуск полученного исполняемого файла. Для указания каждого из них используются следующие параметры конфигурации:
--build=сборка
Система, на которой построен пакет.
--host=хост
Система, в которой будут работать встроенные программы и библиотеки.
И чуть ниже:
Опции --host и --build обычно все, что нам нужно для кросс-компиляции. Единственное исключение — если собираемый пакет сам является кросс-компилятором: нам нужна третья опция, чтобы указать его целевую архитектуру.
--target=цель
При создании инструментов компилятора: система, для которой инструменты будут создавать выходные данные.
Относительно комментария "Я даже сюда не дохожу":
make
make install DESTDIR=/home/xport # <-- I don't even get here
Вам нужно показать ошибку компиляции, с которой вы сталкиваетесь при запуске make
.
person
jww
schedule
17.12.2019
configure
, вам нужно указать цель для сборки, хост по умолчанию будет использовать локальную хост-систему. - person Some programmer dude   schedule 17.12.2019--build
, а не--target
.--target
используется для сборки компилятора для арки. Очень запутанно... - person jww   schedule 17.12.2019