交叉编译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 错误详解