3

最近,我有了开始使用 Mozilla NSS 并学习使用它的想法,以便在将来的某个地方,我可以使用它,或者至少可以开始为它做出贡献。

所以我去了它的网站并使用 mercurial 将它的源代码克隆到一个导演“NSS”中

然后我用

make nss_build_all

代替

gmake nss_build_all

注意:我不知道,如果它有所作为,gmake 只是 GNU Make

这个 make 命令在 nss 文件夹之外创建了一个 dist 文件夹。所以,现在我的 NSS 文件夹有 3 个文件夹 nss、nspr、dist。

在 .bashrc 我在末尾添加了一行

export LD_LIBRARY_PATH=/home/ayusun/workspace/NSS/dist/Linux3.5_x86_glibc_PTH_DBG.OBJ/lib

然后我转到这个示例代码,复制粘贴并将其保存在我的 NSS 文件夹中。然后我试图编译它,但它失败了,说它找不到iostream.h,我过去并改变了头文件的位置

所以

<iostream.h> became <iostream>
"pk11pub.h" became "nss/lib/pk11wrap/pk11pub.h"
"keyhi.h" became "nss/lib/cryptohi/keyhi.h"
"nss.h" became "nss/lib/nss/nss.h"

我尝试再次编译,但这次出现错误,它找不到实际上存在于 dist/*.OBJ/include/ 中的“planera.h”,它是指向 nspr 中文件 planeras.h 的链接

所以我不知道如何再包含这些文件。

在包含第 3 方头文件时,我总是遇到麻烦。

谢谢

4

1 回答 1

2

这是一个老问题,但无论如何我都会回答它以供将来参考。

最简单的方法就是为您的操作系统使用 NSS 包。然后,您可以使用,和 and 之类的
东西nss-config --cflags,并将其添加到您的and中。nss-config --libsnspr-config --cflagsnspr-config --libsCFLAGSLDFLAGS

对于那些决定编译自己的 NSS 的人,我将简要介绍一下。

NSS 标头位于dist/public. 添加-I/path/to/dist/public到您的编译器命令行。NSPR 标头位于dist/Debug/include¹ 中,因此请添加-I/path/to/dist/Debug/include到您的编译器命令行中。

现在你可以使用#include <nspr/prio.h>and#include <nss/nss.h>和朋友了。

NSS 代码依赖于直接取消包含 NSPR 标头,因此您需要为其添加-I/path/to/dist/Debug/include/nspr以查找plarena.h. 或者你可以做同样的事情,而不是像我上面所做的那样为你的包含添加前缀。由你决定。

现在将-L/path/to/dist/Debug/lib和添加-lnss3 -lnspr4到您的链接器命令行。您可能还想添加-rpath /path/to/dist/Debug/lib运行时链接路径,或将它们复制到系统目录或使用LD_LIBRARY_PATH.

我希望这能让你开始。

¹ 这实际上取决于您的操作系统和构建类型。我希望你能找出Debug你的情况下的实际目录的名称。

于 2019-08-14T13:08:37.950 回答