前提:gcc-linaro-5.3.1-2016.05-i686_aarch64-linux-gnu编译链配置完成,CFLAGS、LDFLAGS等关键环境变量已经导入/etc/profile,如下图
- 上面的库和头文件来自arm公版CentOS7,即直接从公版CentOS7中提取库和头文件放到对应的目录下
我使用的版本如下:
Linux localhost.localdomain 4.18.0-193.28.1.el7.aarch64 #1 SMP Wed Oct 21 16:25:35 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
我们需要用到的编译选项
1 2 3 4 5 6 7
| --prefix # 指定nmap安装位置 --host # 指定编译链 --with-includes # 指定头文件的搜索目录 --without-zenmap # 关闭zenmap编译 --with-openssl # 链接openssl库 --with-libpcap # 链接libpcap库,用于发包等网络操作 --with-pcre # 链接libpcre库,用于正则处理
|
arm版本gcc的编译选项
对照arm环境中的共享对象,我们找到交叉编译环境下的相同共享对象,指定对应的依赖路径,保证无误
- libpcre.so.1.2.6
- libpcap.so.0.8
1
| ./configure --prefix=/nmap --host=aarch64-linux-gnu --with-includes=/home/project/cross_compile_arm/include --with-libssl-prefix=/home/project/cross_compile_arm/lib64 --with-libpcap=/home/project/cross_compile_arm/
|
0x02 报错处理
按照上述configure选项,我们生成了对应的makefile,最下面的warning能判断,我们没有将openssl和libssh2加入(用不到就不加)
执行make,开始编译报如下错误
1 2 3 4 5 6 7 8 9 10 11
| make[2]: Entering directory `/root/nmap-7.80/nping' aarch64-linux-gnu-g++ -c -I../libdnet-stripped/include -I/home/project/cross_compile_arm/lib/include -I../nbase -I../nsock/include -g -O2 -Wall -fno-strict-aliasing -DHAVE_CONFIG_H -DNPING_NAME=\"Nping\" -DNPING_URL=\"https://nmap.org/nping\" -DNPING_PLATFORM=\"aarch64-unknown-linux-gnu\" -D_FORTIFY_SOURCE=2 ArgParser.cc -o ArgParser.o In file included from nping.h:145:0, from ArgParser.cc:134: ../libnetutil/netutil.h:142:18: fatal error: pcap.h: No such file or directory compilation terminated. make[2]: *** [ArgParser.o] Error 1 make[2]: Leaving directory `/root/nmap-7.80/nping' make[1]: *** [all] Error 2 make[1]: Leaving directory `/root/nmap-7.80/nping' make: *** [build-nping] Error 2
|
发现是路径指定出错,configure生成的makefile会找到我们给出路径的include目录,下面给出修改
1
| ./configure --prefix=/nmap --host=aarch64-linux-gnu --with-includes=/home/project/cross_compile_arm/ --with-libssl-prefix=/home/project/cross_compile_arm/ --with-libpcap=/home/project/cross_compile_arm/
|
继续make,成功编译
0x03 最终参数
最终我们的编译选项
1 2 3
| ./configure --prefix=/nmap --host=aarch64-linux-gnu --with-includes=/home/project/cross_compile_arm/ --with-libssl-prefix=/home/project/cross_compile_arm/ --with-libpcap=/home/project/cross_compile_arm/
make && make install
|
成功编译安装