本文目的
虽然之前也写过编译OpenWRT的文章,但是由于版本等原因,此次遇到的问题与之前不太一样,特地记录一下。
编译环境
- Archlinux 64bit
- GCC v7.2.0
- Perl v5.26.1
项目源码
项目源码托管在GitHub上,地址如下:**openwrt**。
前提工作
必装工具
可以在这里找到目前支持系统的编译工具。Archlinux的安装命令如下:
1
sudo pacman -S --needed subversion asciidoc bash bc binutils bzip2 fastjar flex git gcc util-linux gawk intltool zlib mercurial make cdrkit ncurses openssl patch perl-extutils-makemaker rsync sdcc unzip wget gettext libxslt boost libusb bin86 sharutils b43-fwcutter findutils
Checkout项目代码
1
git clone git@github.com:openwrt/openwrt.git
取得源代码后,需要执行下面的命令,将package全部安装。
1 | ./scripts/feeds update -a |
编译
1 | cd openwrt |
遇到的问题
出现问题的部分主要是host工具编译出错。主要是因为这些工具之间有相互依赖,某个部分修改后,会引起不兼容的问题。
automake编译报错

Perl版本过高会导致Perl脚本的正则匹配出现问题,在Perl 5中取消了正则匹配的大括号({、}),因此,只需要在相应的文件中,把大括号删掉就行了。
注意:编译报错是由一个tmp文件引起的,因此,需要修改生成tmp文件的源文件,才可以修复错误。
u-boot编译报错

这个错误是由于rsa库版本更新导致的,需要使用这个**补丁文件**进行修复。
修复时,需要将不定文件放在与rsa-sign.c相同目录下执行。
cmake编译错误

这个问题是由于openssl版本引起的,可以使用系统自带的openssl回避这个问题。
在cmake根目录下,手动编译安装,在配置时,需要指明使用系统的库文件。记得修改PATH
1 | ./configure --system-libs --prefix=<PATH>/openwrt/staging_dir/host |
cmake编译错误

这个问题是由于系统缺少JsonCpp库引起的,在系统中安装一下就行了。