build NSS for current host

step0、参考

step1、安装依赖

所有时Terminal + Shell + GNU CoreUtils
下载时cURL
解压时tar + gzip
编译时gmakegcc / GCC | Clang / LLVM
运行时
  • glibc ( libc.solibrt.solibdl.solibpthread.sold-linux-x86-64.so )
  • NSPR ( libnspr4.solibplds4.solibplc4.so、  )

step2、使用curl命令下载NSS源码包 (

curl -LO https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_48_RTM/src/nss-3.48.tar.gz

step3、使用tar解压NSS源码包

tar vxf nss-3.48.tar.gz

step4、进入nss-3.48/nss目录

cd nss-3.48/nss

step5、查看nss-3.48/nss目录中的内容

step6、使用make进行编译

make [option]... [VAR=VALUE]... [TARGET]...
VARVALUE示例说明
CCgcc |  clang指定C编译器
CFLAGS-O2 -v指定C编译器的参数
CXXg++ |  clang++指定C++编译器
CXXFLAGS-O2 -v指定C++编译器的参数
CPPcpp指定C预处理器
CPPFLAGS-I<includeDIR>指定C预处理器的参数
LDFLAGS-L<libDIR>指定C链接器的参数
LIBS-l<libName>指定C链接器要链接的库的名称
USE_640 | 1是否支持64bit
BUILD_OPT0 | 1是否进行优化
NSS_ENABLE_WERROR0 | 1是否将警告当作错误
USE_SYSTEM_ZLIB0 | 1是否使用系统中已安装的zlib
NSS_USE_SYSTEM_SQLITE0 | 1是否使用系统中已安装的SQLite
NSPR_INCLUDE_DIR/usr/local/opt/nspr/include/nspr指定NSPR头文件所在路径
NSPR_LIB_DIR/usr/local/opt/nspr/lib指定NSPR库文件所在路径

示例:

make \
    CFLAGS="-O2 -v" \
    USE_64=1 \
    BUILD_OPT=1 \
    NSPR_INCLUDE_DIR=/usr/local/opt/nspr/include/nspr \
    NSPR_LIB_DIR=/usr/local/opt/nspr/lib

step7、安装

cd ../dist

PREFIX=/usr

mkdir -p $PREFIX/{bin,lib/pkgconfig,include/nss}

install -v -m755 Linux*/lib/*.so              $PREFIX/lib
install -v -m644 Linux*/lib/{*.chk,libcrmf.a} $PREFIX/lib

cp -v -RL {public,private}/nss/*              $PREFIX/include/nss
chmod -v 644                                  $PREFIX/include/nss/*

install -v -m755 Linux*/bin/{certutil,pk12util} $PREFIX/bin

cat > $PREFIX/lib/pkgconfig/nss.pc <<EOF
prefix=${PREFIX}
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include/nss

Name: NSS
Description: Mozilla Network Security Services
Version: 3.48
Requires: nspr >= 4.12
Libs: -L\${libdir} -lnss3 -lnssutil3 -lsmime3 -lssl3
Cflags: -I\${includedir}
EOF