交叉编译zlib

源码交叉编译zlib生成,方法如下:

$ wget http://www.zlib.net/zlib-1.2.11.tar.gz
$ tar -zxvf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11/
$ export PATH=$PATH:/usr/aarch64-linux-gnu
$ export CC=aarch64-linux-gnu-gcc
$ export AR=aarch64-linux-gnu-ar
$ export RANLIB=aarch64-linux-gnu-ranlib
$ ./configure --prefix=/usr/aarch64-linux-gnu --includedir=/usr/aarch64-linux-gnu/include --libdir=/usr/aarch64-linux-gnu/lib --shared
$ make -j8
$ sudo make install

继续编译dbus,make -j8,发现还是报的上面的同一个错误,这是意识到,缺少的不是zlib,glib,下面交叉编译glib:

交叉编译glibc

$ wget http://ftp.gnu.org/gnu/libc/glibc-2.31.tar.gz
$ tar -zxvf glibc-2.31.tar.gz
$ cd glibc-2.31/
$ mkdir configure_dir  (glibc的configure要求在与源码路径不同的地方运行,可以新建一个目录然后使用绝对路径运行configure)
$ /home/tlx/third/libc/glibc-2.31/configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ --prefix=/usr/aarch64-linux-gnu --host=aarch64-linux-gnu --target=arm-linux
$ make -j8
$ sudo make install

参考:

  • glibc交叉编译

继续编译dbus,make -j8,发现继续报同样的错误,再细看,发现缺少的不是glibc,而是glib,这两个不一样,gio是glib中的内容,百度查得,源码交叉编译glib:

交叉编译glib

$ ./configure --prefix=/usr/aarch64-linux-gnu CC=aarch64-linux-gnu-gcc --host=aarch64-linux-gnu LIBFFI_CFLAGS="-I/usr/aarch64-linux-gnu/include" LIBFFI_LIBS="-l/usr/aarch64-linux-gnu/lib" ZLIB_CFLAGS="-I/usr/aarch64-linux-gnu/include" ZLIB_LIBS="-lz -L/usr/aarch64-linux-gnu/lib" --cache-file=glib.cache --disable-selinux  --disable-xattr --disable-libelf

参考:

  • Glib 2.45.3 交叉编译完整版 报错:
configure: error:
*** You must have either have gettext support in your C library, or use the
*** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html

交叉编译gettext

编译安装gettext:
参考:

  • 交叉编译-20:gettext移植到君正平台
$ tar -zxvf gettext-0.20.1.tar.gz
$ cd gettext-0.20.1
$ ./configure --prefix=/usr/aarch64-linux-gnu --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ CFLAGS="-fPIC"
$ make -j8
$ sudo make install

编译通过,继续编译glib,还是报同样的错误,直接在本机上进行安装试试sudo apt-get install -y gettext,安装之后继续编译,报错不同,如下:

checking for growing stack pointer... configure: error: in `/home/tlx/third/glib/glib-2.45.1':
configure: error: cannot run test program while cross compiling
See `config.log' for more details

解决:

$ vim glib.cache  添加内容

glib_cv_stack_grows=no
glib_cv_uscore=no
ac_cv_func_posix_getgrgid_r=no
ac_cv_func_posix_getpwuid_r=no

参考:

  • 解决’配置,编译glib-2.26.1库’错误.

configure通过,继续编译make -j8,报错如下:

gdate.c:2497:7: error: format not a string literal, format string not checked [-Werror=format-nonliteral]
       tmplen = strftime (tmpbuf, tmpbufsize, locale_format, &tm);

解决:$ vim glib/gdate.c +2497 在下面两行的位置加入

2442 #pragma GCC diagnostic push
2443 #pragma GCC diagnostic ignored "-Wformat-nonliteral"

参考:

  • [gdate.c:2497:7: error: format not a string literal, format string not checked -Werror=format-nonlit
  • gdate error: format not a string literal -Werror=format-nonliteral 错误详解