交叉编译 Mozilla NSS 库
最近在做嵌入式平台上的 Chromium 移植工作,由于 Chromium 在 Linux 平台下需要依赖系统的 NSS 库,但是目标平台并没有这个库,只好自己移植一下。
获取最新的 Mozilla NSS 库源码包,这里我们下载 NSS NSPR 二合一包:
1 2 3 | wget https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_43_RTM/src/nss-3.43-with-nspr-4.21.tar.gz tar -zxvpf nss-3.43-with-nspr-4.21.tar.gz cd nss-3.43 |
由于 NSS 依赖 NSPR,我们需要首先编译 NSPR 库:
1 2 3 4 5 | cd nspr CC=arm-none-linux-gnueabi-gcc CCC=arm-none-linux-gnueabi-g++ \ AR=arm-none-linux-gnueabi-ar RANLIB=arm-none-linux-gnueabi-ranlib \ ./configure --target=arm-linux --cache-file=/dev/null --prefix=$PWD/../dist make && make install |
由于 NSS 库的编译脚本默认使用 GYP 编译,需要先配置一下环境:
1 2 | cd ~/ && git clone https://chromium.googlesource.com/external/gyp export PATH=$HOME/gyp:$PATH |
先修改一下 coreconf/shlibsign.py 这个脚本,将下面一行注释,不然报错:
1 | # subprocess.check_call([os.path.join(bin_path, 'shlibsign'), '-v', '-i', lib_file], env=env, stdout=dev_null, stderr=dev_null) |
然后就可以开始编译 NSS 库了:
1 2 3 4 | cd nss CC=arm-none-linux-gnueabi-gcc CCC=arm-none-linux-gnueabi-g++ \ AR=arm-none-linux-gnueabi-ar RANLIB=arm-none-linux-gnueabi-ranlib \ ./build.sh --with-nspr=$PWD/../dist/include/nspr:$PWD/../dist/lib --target=arm |
注:nss-3.43/dist 为编译 out 目录,编译完后 include/lib 都在里面了。