2017-08-25 83 views
1

Cプログラムをlibssl.soとリンクしようとしましたが、リンカーはヘッダファイルに存在するライブラリ内の関数を見つけることができません。関数はopenssl/sha.hで宣言されていますが、共有ライブラリには見つかりません

Makefileのターゲットコード:

$(CC) -o [email protected] $^ $(CFLAGS) -lssl -lmagic 

出力:

... 
/usr/bin/ld: obj/signature.o: undefined reference to symbol '[email protected]@OPENSSL_1_1_0' 
//usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 
... 

関数SHA256_Init()であり、それは、それがソースファイルに含まれるopenssl/sha.hで存在します。

私はDebian 9に入っています。libssl1.0.0libssl1.0.2libssl1.1libssl-dev(1.1.0)がインストールされています。

$ la /usr/lib/x86_64-linux-gnu/libssl* 
-rw-r--r-- root root 357024 /usr/lib/x86_64-linux-gnu/libssl3.so 
-rw-r--r-- root root 738444 /usr/lib/x86_64-linux-gnu/libssl.a 
lrwxrwxrwx root root  13 /usr/lib/x86_64-linux-gnu/libssl.so -> libssl.so.1.1 
-rw-r--r-- root root 395176 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 
-rw-r--r-- root root 431232 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 
-rw-r--r-- root root 442920 /usr/lib/x86_64-linux-gnu/libssl.so.1.1 

何が問題なのですか?

+0

'nm -D /usr/lib/x86_64-linux-gnu/libssl.so | grep SHA256' show? – Barmar

+0

@Barmar、 'U SHA256_Init'、' U SHA256_Transform'です。 – user1764823

+0

「@@ OPENSSL_1_1_0」は重要だと思います。私はそれがどこから来ているのかわからない、それはC++のmanglingのようなものかもしれないようだ。 – Barmar

答えて

3

OpenSSLはlibsslとlibcryptoの2つのライブラリに分割されています。これらの関数はlibcryptoに存在するため、libsslにリンクする必要はありません。使用方法

-lcrypto 

さらに詳しくは、documentationをお読みください。 libcryptoを正しく初期化する方法

関連する問題