当前位置: 首页 > 工具软件 > arp-scan > 使用案例 >

linux 下交叉编译开源代码(以arp-scan为例)

简宏义
2023-12-01

--------------------------------------------------------------------------------
author:hjjdebug
date: 2019年 03月 04日 星期一 12:13:27 CST
description:
此文档,用来简述一个开源软件,如何进行交叉编译移植到嵌入式平台上,
以x86-64编译arm平台的arp-scan 程序为例,简述了编译带依赖库,不带依赖库的配置,编译方法!
--------------------------------------------------------------------------------
1. 下载arp-scan 源码,阅读其README,是标准autotool 工具的编译方式
    按照其说明方式, autoreconf --install, ./congigure, make , make install 方式进行。
    期间会用到libpcap 库.所以你需要先安装libpcap 库. sudo apt-get install libpcap-dev
    这样小试身手,看看环境等工具是否齐全.

2. 下面我们直奔主题,用arm编译工具arm-linux-gnueabihf-gcc 來编译arp-scan 源码
    $ CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux --prefix=/usr/hjj
解释一下:
    CC=arm-linux-gnueabihf-gcc  是设置CC 变量,用arm编译工具进行编译
    ./configure 是重新生成Makefile
    --host=arm-linux 是说明是交叉编译,编译的目标文件不需要在x86上测试
    --prefix=/usr/hjj 是重新指定make install 的安装路径
    上面是泛泛之谈,还要认真理解!

    $CC=arm-linux-gnueabihf-gcc ./configure
    checking whether we are cross compiling... configure: error: in `/home/hjj/gitSource/arp-scan':
    configure: error: cannot run C compiled programs.
    If you meant to cross compile, use `--host'.
    以上错误,要求你加上--host 以说明是交叉编译,不要进行本地运行测试

    $CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux
    configure: Cannot find pcap library containing pcap_open_live
    configure: error: Check that you have libpcap version 1.0 or later installed
    以上错误,说明缺少libpcap 的库, 这个库,当然要是arm 库了


3. 交叉编译libpcap 库
    这个比较简单,因为它不再需要别的库了,不过在配置编译过程中,系统需要先安装flex,bison两个工具包
    CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux --prefix=/usr/hjj
    make
    make install 后将库文件安装到了/usr/hjj/lib 目录下

4. 编辑/etc/ld.conf, 在合适的位置加入/usr/hjj/lib 这个连接查找目录,然后执行sudo ldconf 使配置生效

5. 重新执行arm-scan 的配置,但它依然报找不到libpcap 库错误,这时候我想了一想,应该是没有去找/usr/hjj/lib
    目录,我们把它的测试文件拎出来试验一下:

    | ifdef __cplusplus
    | extern "C"
    | #endif
    | char pcap_open_live ();
    | int
    | main ()
    | {
    | return pcap_open_live ();
    |   ;
    |   return 0;
    | }
    configure:4271: arm-linux-gnueabihf-gcc -o conftest  -Wall -Wshadow -Wwrite-strings -Wextra -fstack-protector -D_FORTIFY_SOURCE=2 -Wformat
    -Wformat-security   conftest.c -lpcap   >&5
    /home/hjj/bin/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.9.2/../../../../arm-linux-gnueabihf/bin/ld:
    cannot find -lpcap
    collect2: error: ld returned 1 exit status
    configure:4271: $? = 1    

    我们看到确实是没有加入-L/usr/hjj/lib, 看来ldconf 只是针对x86-64的,那如何加入连接路径呢? 用CFLAGS 变量

6. 添加编译变量export CFLAGS="-L/usr/hjj/lib"
    然后:
    $ CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux --prefix=/usr/hjj
    配置通过!
    由于在编译的时候还会有找不到头文件的问题,完整的编译变量应该是
    export CFLAGS="-I/usr/hjj/include -L/usr/hjj/lib"
    $ CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux --prefix=/usr/hjj
    配置通过,编译通过!
    可以把arp-scan 程序copy 到arm板上运行了。
    把依赖库也要copy 过去 libpcap.so.0.8
    cp libpcap.so.1.5.3 /usr/lib
    ln -s libpcap.so.1.5.3 libpcap.so.0.8

执行,./arp-scan -l 有几个警告,不理会它也行, 不影响运行
如果想去掉, 把生成的文件3个txt 文本也copy到嵌入式对应目录就可以了,这是mac地址到vendor的映射文件
WARNING: Cannot open MAC/Vendor file /usr/hjj/share/arp-scan/ieee-oui.txt: No such file or directory
WARNING: Cannot open MAC/Vendor file /usr/hjj/share/arp-scan/ieee-iab.txt: No such file or directory
WARNING: Cannot open MAC/Vendor file /usr/hjj/share/arp-scan/mac-vendor.txt: No such file or directory


所以再总结一下: CC指明了编译器, host说明主机类型是否是交叉编译,CFLAGS用来调整CC的编译选项,--prefix说明安装目录,
用bcompare 可以观察到底引起了什么变化,变化都是很小的,甚至可以直接修改Makefile!!

 

 类似资料: