在启用OpenApp ID的情况下交叉编译Snort

时间:2017-05-26 20:57:58

标签: cross-compiling autotools libtool snort

我正在尝试使用uClibc和openwrt工具链为ARM设备构建Snort 2.9.9.0。

我经常遇到编译问题,包括:

libtool attempting to link library **/usr/lib/libdnet** rather than $TOOLCHAIN_DIR/usr/lib/libdnet

我怀疑我的问题源于autotools,因为所有必需的库都已到位,我的配置脚本在修改后运行,以防止交叉编译错误('在交叉编译时无法配置')。

我的问题是:

  1. 使用autotools进行交叉编译的正确方法是什么 在这个snort交叉编译上下文?
  2. configure脚本尝试 执行编译的程序并为交叉编译抛出错误, 如何为其编译测试提供缓存的答案而不是修改配置脚本?
  3. 我的构建脚本应如何成功进行交叉编译 snort-2.9.9.0,在我的x84_64上为ARM设备启用了openapp-id 目标
  4. 我对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

1 个答案:

答案 0 :(得分:0)

  
      
  1. 在此snort交叉编译上下文中使用autotools进行交叉编译的正确方法是什么?
  2.   

给定使用Autoconf 2.50或更高版本构建的configure脚本(最新版本为v2.69),进入交叉编译模式的正确方法是使用--build--host运行它指定不同系统类型的选项。 --target选项与此无关,实际上主要适用于配置构建代码的软件。你不应该需要它。

  
      
  1. configure脚本尝试执行已编译的程序并为交叉编译引发错误,如何提供缓存   回答它的编译测试,而不是修改配置   脚本?
  2.   

如果configure脚本执行涉及执行使用所选工具链构建的程序的测试,则它不会在交叉编译模式下运行,或者这些测试被明确编程到configure中。你提交的包装脚本应该将configure置于交叉编译模式,所以我猜测后者。在这种情况下,您可能正在考虑修改configure脚本来解决问题。 (或者,实际上,在configure.ac中修改其M4源并重建它。)

  
      
  1. 我的构建脚本应该如何成功地在我的x84_64上为ARM设备交叉编译snort-2.9.9.0并使用openapp-id   目标
  2.   

这在很大程度上取决于configure脚本。我不希望你需要为它指定一堆$TOOLCHAIN - 相对目录名,尽管那些与特定库相关的那些比那些指定交叉编译工具链应该是的目录更合理。无论如何使用。虽然我无法评估详细信息,但我在包装器脚本中的configure调用中看不到任何红色标记。