交叉编译nss库
在Qt5.12.10基础上编译QtwebEngine,发现要求NSS >= 3.26 is required.而系统里的nss库只有2.26 ,因此需要重新移植NSS,本文编译的nss版本是3.73.
本次使用的虚拟机:Ubuntu20.04
ARM目标板:imx6Q主板
源码下载地址
nss-3.*.tar.gz.
需要下载补丁:
NSS 依赖下载:
nspr-4.x.tar.gz.
下载的是nss3.73,nspr4.32
本文直接下载的是整体包:nss-3.73-with-nspr-4.32.tar.gz
nss-3.73-with-nspr-4.32.tar.gz |
在Ubuntu的X86平台编译nspr和nss
(因为直接交叉编译报错,需要在X86平台编译后的文件)
首先Ubuntu20.04的X86平台编译nss以及依赖库nspr
编译nspr
cd nss-3.73/
cp -r nspr/ nspr-x86/
#此目录用gcc编译
cd ./nspr-x86/
sed -ri 's#^(RELEASE_BINS =).*#\1#' pr/src/misc/Makefile.in
sed -i 's#$(LIBRARY) ##' config/rules.mk
./configure --with-pthreads --enable-64bit --with-mozilla
make
#安装是因为等会还要make 64位的nss库
make install
#完成后nspr被安装到虚拟机/usr/local目录下
编译NSS
cd ../
cp -r nss/ nss-x86/
patch -Np1 -i ../nss-3.73-standalone-1.patch
make BUILD_OPT=1 \
NSPR_INCLUDE_DIR=/usr/local/include/nspr \
USE_SYSTEM_ZLIB=1 \
ZLIB_LIBS=-lz \
NSS_ENABLE_WERROR=0 \
$([ $(uname -m) = x86_64 ] && echo USE_64=1) \
$([ -f /usr/include/sqlite3.h ] && echo NSS_USE_SYSTEM_SQLITE=1)
交叉编译nspr和nss
配置交叉编译环境:
source /opt/fsl-imx-x11/4.9.88-2.0.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
export C_INCLUDE_PATH=/opt/fsl-imx-x11/4.9.88-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/include
交叉编译nspr:
#用交叉编译器编译nspr
cd ../nspr/
sed -ri 's#^(RELEASE_BINS =).*#\1#' pr/src/misc/Makefile.in
sed -i 's#$(LIBRARY) ##' config/rules.mk
./configure --with-pthreads \
--prefix=/opt/fsl-imx-x11/nspr \
--host=arm-linux
make
#此时会报错提示../../../config/./nsinstall: ../../../config/./nsinstall: 无法执行二进制文件
#原因用32位交叉编译器生成的可执行文件nsinstall,pc无法执行
#解决方法:用gcc编译生成的文件进行替换
cp ../nspr-x86/config/nsinstall ./config
#继续make
make
make install
交叉编译nss:
#用交叉编译器编译nss
cd ../nss
patch -Np1 -i ../nss-3.50-standalone-1.patch
make -j1 BUILD_OPT=1 \
NSPR_INCLUDE_DIR=/opt/fsl-imx-x11/nspr/include/nspr \
NSPR_LIB_DIR=/opt/fsl-imx-x11/nspr/lib \
NSS_USE_SYSTEM_SQLITE=1 \
NSS_ENABLE_WERROR=0 \
USE_SYSTEM_ZLIB=1 \
USE_STATIC_RTL=1 \
OS_TEST=arm \
CROSS_COMPILE=1
#此时make报错:/bin/sh: 行 2:
#./coreconf/nsinstall/Linux5.11_arm_glibc_PTH_OPT.OBJ/nsinstall: 无法执行二进制文件: 可执行文件格式错误
#报错原因与nspr库相同,所以也用pc的gcc编译一个生成可执行文件进行替换
cp ../nss-x86/coreconf/nsinstall/Linux5.11_x86_64_cc_glibc_PTH_64_OPT.OBJ/nsinstall ./coreconf/nsinstall/Linux5.11_arm_glibc_PTH_OPT.OBJ/nsinstall
#继续上面的执行make设置
"make"
#成功
安装完成后,需要转移库的位置,路径根据自己需求调整
# cd ../dist/Linux5.11_arm_glibc_PTH_OPT.OBJ/
# install -v -m755 lib/*.so /opt/fsl-imx-x11/4.9.88-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/lib/nss/lib/
# install -v -m644 lib/{*.chk,libcrmf.a} /opt/fsl-imx-x11/4.9.88-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/lib/nss/lib/
# install -v -m755 -d /opt/fsl-imx-x11/4.9.88-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/lib/nss/include
# cp -v -RL ../{public,private}/nss/* /opt/fsl-imx-x11/4.9.88-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/lib/nss/include
# chmod -v 644 /opt/fsl-imx-x11/4.9.88-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/lib/nss/*
# install -v -m755 bin/{certutil,nss-config,pk12util} /opt/fsl-imx-x11/4.9.88-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/bin
# install -v -m644 lib/pkgconfig/nss.pc /opt/fsl-imx-x11/4.9.88-2.0.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/lib/pkgconfig