OpenSSL ERR_GET_LIB数值到人类可理解的线索

OpenSSL ERR_GET_LIB数值到人类可理解的线索,openssl,porting,openwrt,Openssl,Porting,Openwrt,我正在将一个用C编写的项目移植到OpenWRT mipsel系统上。交叉编译和库链接都很好,项目在mipsel系统上构建和运行,但是OpenSSL存在运行时问题 似乎PKCS12_create由于某种未知原因而失败。以下是我发现的错误打印错误fp: 23502:error:06074079:lib(6):func(116):reason(121):NA:0:TYPE=pbeWithSHA1And40BitRC2-CBC 23502:error:23077073:lib(35):func(119)

我正在将一个用C编写的项目移植到OpenWRT mipsel系统上。交叉编译和库链接都很好,项目在mipsel系统上构建和运行,但是OpenSSL存在运行时问题

似乎PKCS12_create由于某种未知原因而失败。以下是我发现的错误打印错误fp:

23502:error:06074079:lib(6):func(116):reason(121):NA:0:TYPE=pbeWithSHA1And40BitRC2-CBC 23502:error:23077073:lib(35):func(119):reason(115):NA:0: 23502:error:2306C067:lib(35):func(108):reason(103):NA:0: 23502:error:23073067:lib(35):func(115):reason(103):NA:0: 该代码可以正常工作,并在x86系统上进行了良好测试


因此,我这里的问题是:如何找出lib、func和reason数值实际上代表什么?

请通过启用编译时宏OpenSSL\u NO\u ERR检查您的OpenSSL lib是否已编译。如果启用此宏,将从OpenSSL库中删除所有错误字符串。如果禁用此宏,则应获取人类可读的字符串


此外,您还可以检查err.h(用于与lib代码相关的宏)和ssl.h(用于与函数和原因代码相关的宏),以了解这些错误的意义。

虽然我了解这一点,但这是一篇非常古老的文章,但我认为它可能会对某些人有所帮助。
调用pkcs12_create函数时,我也遇到了同样的问题。事实证明,在我的例子中,我没有调用OpenSSL_add_all_algorithms();在调用create函数之前

谢谢你,杰。我编译了一个带有一些额外调试标志和宏的自定义OpenSSL构建。我甚至没有看到这些错误,因为它像一个魔咒一样开箱即用。在没有调试的情况下再次编译,并且运行良好。我不确定,但我认为SDK提供的SSL库可能已精简,或者比默认构建更轻。
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... */
}