交叉编译 Mozilla NSS 库

最近在做嵌入式平台上的 Chromium 移植工作,由于 Chromium 在 Linux 平台下需要依赖系统的 NSS 库,但是目标平台并没有这个库,只好自己移植一下。

获取最新的 Mozilla NSS 库源码包,这里我们下载 NSS NSPR 二合一包:

由于 NSS 依赖 NSPR,我们需要首先编译 NSPR 库:

由于 NSS 库的编译脚本默认使用 GYP 编译,需要先配置一下环境:

先修改一下 coreconf/shlibsign.py 这个脚本,将下面一行注释,不然报错:

然后就可以开始编译 NSS 库了:

注:nss-3.43/dist 为编译 out 目录,编译完后 include/lib 都在里面了。

5 Comments

  1. 嘻哈猴

    大神,再下有几个疑问?
    1.chromium69版本使用了大量c++14的语法,而目前gcc要5.0版本才完全支持,我看你交叉编译工具链才4.9,我之前尝试用4.9编译会报很多语法错误,我用clang在linux上也根本编译不了。
    2.你知道nss库怎么添加公钥和私钥吗?

    • darkgod

      1. 事实上,交叉编译可以使用 chromium 自带的 clang 编译器来完成,然后静态链接 libc++,这样可以彻底解决交叉编译工具链不支持 c++14 语法的问题;当然,这个过程也会用到交叉工具链(gcc) ,其作用不是用来编译,而是提供库函数的头文件;gcc 工具链包里的 libc 目录可以作为 chromium 编译的 sysroot。
      2. nss库是以数据库的形式来存储公钥和私钥的,可以通过其附带的工具 certutil 和 pk12util 来将公钥和私钥导入数据库,具体步骤可参考这篇 wiki

  2. 杨飞

    请教您一个问题。
    交叉编译nss
    root@xxzh:~/tools/nss-3.45/nss# CC=arm-linux-gnueabihf-gcc CCC=arm-linux-gnueabihf-g++ \
    > AR=arm-linux-gnueabihf-ar RANLIB=arm-linux-gnueabihf-ranlib \
    > ./build.sh –with-nspr=/root/tools/nss-3.45/nspr/install/include/nspr:/root/tools/nss-3.45/nspr/install/lib –target=arm
    执行后,输出如下后,一直卡着:
    log: ninja version 0.1.3 initializing
    log: magic group: gid=0 (root)
    log: entering main loop
    log: generating initial pid array..
    log: now monitoring process activity

    。。。

    执行后移植卡在了这里。
    您知道是什么情况吗,谢谢

    • darkgod

      没有遇到你这个问题。从 log 看我猜测是 ninja 版本太低了,你可以升级成高版本的试一下。

  3. jacob

    有个问题请教一下,指定sysroot后,通过clang来编译arm64的版本时候,你们有遇到这个error: “Unknown __WORDSIZE detected”吗?
    错误信息/mysysroot/usr/include/bits/wordsize.h:46:2: error: “Unknown __WORDSIZE detected”
    看了一下对应的文件是arch相关的宏没有定义(如__aarch64__),但这些宏不应该是编译时自动加上的吗?是不是还有什么需要配置?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据