Кросс-компиляция Snort с включенным OpenApp ID
Я пытаюсь собрать Snort 2.9.9.0 для устройства ARM, используя uClibc и набор инструментов openwrt.
У меня постоянно возникают проблемы с компиляцией, в том числе:
• libtool attempting to link library **/usr/lib/libdnet** rather than $TOOLCHAIN_DIR/usr/lib/libdnet
Я подозреваю, что мои проблемы происходят из-за автоинструментов, потому что все необходимые библиотеки на месте, и мой скрипт конфигурирования запускается после изменений, чтобы предотвратить ошибки кросс-компиляции ("Не удается настроить при кросс-компиляции").
Мой вопрос:
- Как правильно использовать автоинструменты для кросс-компиляции в контексте кросс-компиляции snort?
- Скрипт configure пытается выполнить скомпилированные программы и выдает ошибку для кросс-компиляции. Как я могу предоставить кэшированный ответ для его тестирования компиляции, а не модифицировать скрипт configure?
- Как мой сценарий сборки должен выглядеть для кросс-компиляции snort-2.9.9.0 с включенным openapp-id на моем x84_64 для целевого устройства ARM.
Я не знаю много об автоинструментах, любая информация, касающаяся автоинструментов и перекрестного компоновки, была бы признательна.
Мой скрипт сборки выглядит следующим образом:
•••••••••••••••••••••••••••••••••••••••
#!/bin/bash
./configure
--target=arm-openwrt-linux-uclibceabi \
--host=arm-openwrt-linux-uclibceabi \
--build=x86_64-linux \
--prefix=/usr \
--enable-flexresp \
--with-libpcap-includes=$TOOLCHAIN_DIR/usr/include \
--with-libpcap-libraries=$TOOLCHAIN_DIR/usr/lib \
--with-libpcre-includes=$TOOLCHAIN_DIR/usr/include \
--with-libpcre-libraries=$TOOLCHAIN_DIR/usr/lib \
--with-daq-includes=$TOOLCHAIN_DIR/usr/include \
--with-daq-libraries=$TOOLCHAIN_DIR/usr/lib \
--disable-static-daq \
--enable-open-appid \
--disable-lzma \
CPPFLAGS=" \
-I$TOOLCHAIN_DIR/include \
-I$TOOLCHAIN_DIR/usr/include \
-I/home/antony/gwn/system/opensource/user/snort-2.9.9.0/librpc_ipq8064/include \
-I$TOOLCHAIN_DIR/usr/include/luajit-2.0 \
" \
LDFLAGS=" \
-L$TOOLCHAIN_DIR/usr/lib \
-L$TOOLCHAIN_DIR/librpc/lib \
"
make clean
make
DESTDIR=$TOOLCHAIN_DIR make install
•••••••••••••••••••••••••••••••••••••••
Если уместно, вот мои переменные среды:
CROSS_PREFIX=arm-openwrt-linux-
SHELL=/bin/bash
KERNEL_PATH=/home/antony/MY_SDK/kernel/ipq8064/linux-3.4.103/
TOOLCHAIN_INCLUDE_DIR=/home/antony/MY_SDK/OpenWrt-Toolchain-arm_v7-a-gcc-4.6-linaro_uClibc-0.9.33.2_eabi/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi//include/
LDCFLAGS=/home/antony/MY_SDK/OpenWrt-Toolchain-arm_v7-a-gcc-4.6-linaro_uClibc-0.9.33.2_eabi/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi//usr/lib/
USER=antony
LD_LIBRARY_PATH=/home/antony/MY_SDK/OpenWrt-Toolchain-arm_v7-a-gcc-4.6-linaro_uClibc-0.9.33.2_eabi/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi//usr/lib/
MKIMAGE_PATH=/home/antony/MY_SDK/tools/bin
PKG_CONFIG_SYSROOT_DIR=/home/antony/MY_SDK/OpenWrt-Toolchain-arm_v7-a-gcc-4.6-linaro_uClibc-0.9.33.2_eabi/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/
LZMA_PATH=/home/antony/MY_SDK/tools/bin/
PATH=/home/antony/bin:/home/antony/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/antony/MY_SDK/OpenWrt-Toolchain-arm_v7-a-gcc-4.6-linaro_uClibc-0.9.33.2_eabi/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/bin
LD=arm-openwrt-linux-ld
PWD=/home/antony/MY_SDK/user/snort-2.9.9.0
STRIP=arm-openwrt-linux-strip
LANG=en_US.UTF-8
PROV_PATH=/home/antony/MY_SDK/system/provision/provision.h
IMAGE_BUILD=/home/antony/MY_SDK//image_build/
HOME=/home/antony
SHLVL=2
TOOLCHAIN_BASE_DIR=/home/antony/MY_SDK/OpenWrt-Toolchain-arm_v7-a-gcc-4.6-linaro_uClibc-0.9.33.2_eabi/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/
STAGING_DIR=/home/antony/MY_SDK/OpenWrt-Toolchain-arm_v7-a-gcc-4.6-linaro_uClibc-0.9.33.2_eabi/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/
LOGNAME=antony
PKG_CONFIG_PATH=/home/antony/MY_SDK/OpenWrt-Toolchain-arm_v7-a-gcc-4.6-linaro_uClibc-0.9.33.2_eabi/toolchain-arm_v7-a_gcc-4.6-linaro_uClibc-0.9.33.2_eabi//usr/lib/pkgconfig
LESSOPEN=| /usr/bin/lesspipe %s
PROJECT_BASE_DIR=/home/antony/MY_SDK/
CC=arm-openwrt-linux-gcc
1 ответ
- Как правильно использовать автоинструменты для кросс-компиляции в контексте кросс-компиляции snort?
Учитывая configure
скрипт, созданный с использованием Autoconf 2.50 или более поздней версии (последняя версия v2.69), правильный способ входа в режим кросс-компиляции - запустить его с --build
а также --host
параметры, указывающие различные типы систем. --target
Параметр не имеет значения для этой цели и фактически применяется в основном для настройки программного обеспечения, которое создает код. Вам это не нужно.
- Скрипт configure пытается выполнить скомпилированные программы и выдает ошибку для кросс-компиляции. Как я могу предоставить кэшированный ответ для его тестирования компиляции, а не модифицировать скрипт configure?
Если configure
скрипт выполняет тесты, которые включают в себя выполнение программ, созданных с помощью выбранной цепочки инструментов, либо он не работает в режиме кросс-компиляции, либо эти тесты явно запрограммированы в configure
, Представленный вами скрипт-обертка должен поставить configure
в режиме кросс-компиляции, так что я угадываю последнее. В этом случае вы, вероятно, смотрите на изменение configure
скрипт для решения проблемы. (Или, собственно, изменив его источник M4 в configure.ac
и восстановить его.)
- Как мой сценарий сборки должен выглядеть для кросс-компиляции snort-2.9.9.0 с включенным openapp-id на моем x84_64 для целевого устройства ARM.
Это во многом зависит от configure
скрипт. Я бы не ожидал, что вам нужно будет указать кучу $TOOLCHAIN
-относительные имена каталогов к нему, хотя те, которые связаны с конкретными библиотеками, более правдоподобны, чем те, которые обозначают каталоги, которые в любом случае должен использовать набор инструментов для кросс-компиляции. Хотя я не могу оценить детали, я не вижу никаких красных флажков в configure
вызов в вашем сценарии оболочки.