我正在将用 C 编写的项目移植到 OpenWRT mipsel 系统上。交叉编译和库链接都很好,项目在 mipsel 系统上构建和运行,但是 OpenSSL 存在运行时问题。
似乎 PKCS12_create 由于某些未知原因而失败。这是我通过 ERR_print_errors_fp 发现的:
23502:error:06074079:lib(6):func(116):reason(121):NA:0:TYPE=pbeWithSHA1And40BitRC2-CBC 23502:错误:23077073:lib(35):func(119):reason(115):NA:0: 23502:错误:2306C067:lib(35):func(108):reason(103):NA:0: 23502:错误:23073067:lib(35):func(115):reason(103):NA:0:
这正是OpenSSL GET_ERR_LIB应该提供的。但是,例如,我如何找出 lib 35、函数 119 和原因 115 是什么?
我使用 OpenWRT SDK 交叉编译器并链接来自同一个 SDK 的库(包括 OpenSSL)。
这是我用来获取上面列出的错误的基本代码:
PKCS12 *pkcs12 = NULL;
EVP_PKEY *pkey = EVP_PKEY_new();
X509 *cert = X509_new();
...
pkcs12 = PKCS12_create(password, username, pkey, cert, NULL,
0, 0, 0, PKCS12_DEFAULT_ITER, 0);
ERR_print_errors_fp(stderr);
if (pkcs12 == NULL){
printf("pkcs12 == NULL\n");
/* And here we bail out... */
}
该代码有效,并且在 x86 系统上经过了很好的测试。
所以我的问题是:如何找出 lib、func 和 reason 数值实际代表什么?