Reason for the compilation error : In function sk_X509_num undefined reference to `OpenSSL_sk_num`

Reason for the compilation error : In function sk_X509_num undefined reference to `OpenSSL_sk_num`

我有一个 P12 文件,我正在尝试以编程方式对其进行解析。我成功地解析了它。 当我独立使用代码并在命令行上使用 -ssl 和 -crypto 时,它工作正常。但是当我在我的应用程序中使用相同的代码时,我得到未定义的引用错误:在函数 sk_X509_num undefined reference to OpenSSL_sk_num 和 In function sk_X509_value undefined reference to OPENSSL_sk_value

下面是我使用的代码片段:

{
  Bio *b = Bio_new(BIO_s_mem());
 if(b != nullptr)
 {
   for(int i=0; i< sk_X509_num(ca);i++)
     {
      if(!PEM_write_bio_X509(b, sk_X509_value(ca,i)))
       {
         //some log message.....      
       }
      else
      {
        //some code here
      }
   }

我在 makefile 中包含了以下标志:LDFLAGS+= -lssl -lcrypto OPENSSL 版本为 1.1.1g

我终于可以解决我自己的问题了:

函数 sk_numsk_value 似乎已被替换为 OpenSSL_sk_numOPENSSL_sk_value。链接存在问题,版本 1.1.g.

的符号文件中不知何故丢失了符号

我尝试了以下方法:

i) 在命令行上使用 -lssl -lcrypto。这有效但是当您在应用程序中使用并使用带有选项 -lssl -lcryptomakefile 时,它会失败并显示 error undefined reference.

ii) 将 SSL 降级为 1.0.2 版本,其中 sk_num 未被 OPENSSL_sk_num 替换,但同样失败。

iii) 成功:因此您需要在使用这些函数的应用程序中为 sk_numsk_valuesk_pop_free 定义函数,我从 SSL 中获取这些函数版本 1.1.n,这是 1.1 系列中的最新版本。我希望它能帮助面临这个问题的人。我尝试将 SSL 升级到 1.1.n 版本,但它对我不起作用。