我正在尝试使用uClibc和openwrt工具链为ARM设备构建Snort 2.9.9.0。
我经常遇到编译问题,包括:
•libtool attempting to link library **/usr/lib/libdnet** rather than $TOOLCHAIN_DIR/usr/lib/libdnet
我怀疑我的问题源于autotools,因为所有必需的库都已到位,我的配置脚本在修改后运行,以防止交叉编译错误('在交叉编译时无法配置')。
我的问题是:
我对autotools了解不多,有关autotools和cross compialtion的任何信息都将不胜感激。
我的构建脚本如下:
•••••••••••••••••••••••••••••••••••••••
#!/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
答案 0 :(得分:0)
- 在此snort交叉编译上下文中使用autotools进行交叉编译的正确方法是什么?
醇>
给定使用Autoconf 2.50或更高版本构建的configure
脚本(最新版本为v2.69),进入交叉编译模式的正确方法是使用--build
和--host
运行它指定不同系统类型的选项。 --target
选项与此无关,实际上主要适用于配置构建代码的软件。你不应该需要它。
- configure脚本尝试执行已编译的程序并为交叉编译引发错误,如何提供缓存 回答它的编译测试,而不是修改配置 脚本?
醇>
如果configure
脚本执行涉及执行使用所选工具链构建的程序的测试,则它不会在交叉编译模式下运行,或者这些测试被明确编程到configure
中。你提交的包装脚本应该将configure
置于交叉编译模式,所以我猜测后者。在这种情况下,您可能正在考虑修改configure
脚本来解决问题。 (或者,实际上,在configure.ac
中修改其M4源并重建它。)
- 我的构建脚本应该如何成功地在我的x84_64上为ARM设备交叉编译snort-2.9.9.0并使用openapp-id 目标
醇>
这在很大程度上取决于configure
脚本。我不希望你需要为它指定一堆$TOOLCHAIN
- 相对目录名,尽管那些与特定库相关的那些比那些指定交叉编译工具链应该是的目录更合理。无论如何使用。虽然我无法评估详细信息,但我在包装器脚本中的configure
调用中看不到任何红色标记。