OPENSSLバージョンの互換性の欠如によるundefined reference

824 ワード

最近、プロジェクトの必要性のため、linuxの下でopensslを使用して暗号化と復号化を行う必要があります.
公式サイトの下でopenssl makeはすべて正常で、プログラムをコンパイルする時現れました
undefined reference to `BN_is_zero'
通常、このリンクエラーは、リンクされたライブラリに対応する関数がありませんが、
nm -D libcrypto.so.1.1

コンパイルされたライブラリを表示すると表示されます
00000000000b4190 T BN_is_zero
この関数が存在することを示します.
しかし、コンパイルが完了すると、リンクがリンクされず、理解できません.後で偶然openssl 1を見ました.0.1 cのソースコードにおけるBN_is_ゼロの定義は以下の通りです
#define BN_is_zero(a)       ((a)->top == 0)

1.0です.1中対BN_is_zeroの定義は実はマクロであり、1.1にある.0 hのbn.hにはこう書いてある
int BN_is_zero(const BIGNUM *a);
1.1.0でBN_をis_ゼロは関数として宣言されました.コンパイルで使用するcentosにopenssl 1が付属していることが分かった.0.0であるため、リンク時に-Lディレクトリを指定しない場合のリンクは、実はシステムのデフォルトopenssl 1である.0.0、もちろんこの関数は存在しません.-Lを使用してリンクディレクトリを指定し、LD_に追加します.LIBRARY_PATHでコンパイルして実行できます.