在编译openssl 1.1.0i之前,我通过运行配置了构建:
# ./Configure linux-x86_64
openssl 1.1.0i编译没有明显问题,但在运行时我看到:
Error: LD: symbol not found: 'X509_it'
我在openssl源代码的CHANGES文件中找到了相关的注释:
新的编译选项ASN1_ITEM_FUNCTIONS。这会导致新的ASN1 模块以导出返回ASN1_ITEM指针的函数,而不是返回 ASN1_ITEM结构本身。这添加了几个新的宏 允许访问基本的ASN1功能/结构 透明地。结果,代码不应使用ASN1_ITEM引用 直接(例如&X509_it),而是使用相关的宏(例如 作为ASN1_ITEM_rptr(X509))。此选项是为了允许使用新的ASN1 导出结构有问题的平台上的代码(对于 共享库中的示例),但导出函数返回 指向结构的指针不是。
但是我没有在源代码中找到对ASN1_ITEM_FUNCTIONS的任何引用。然后,我检出了openssl git repo以跟踪该注释,并将当时的源代码与1.1.0i进行比较,发现ASN1_ITEM_FUNCTIONS编译选项似乎已被OPENSSL_EXPORT_VAR_AS_FUNCTION取代。在我生成的opensslconf.h中(如果找到):
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
我无法确定要给哪个选项。/配置自动使用该选项,所以我尝试将#undef更改为#define。可以编译,但仍然出现符号错误。
感觉就像我只是缺少./Configure的选项一样,我需要怎么做才能使缺失的符号得到整理?