私はUbuntu 16.10を使用しています。バージョン1.0.2gではopensslを使用しています。最新のソースコードopenssl-1.1.0cをウェブサイトからダウンロードしてコンパイルしました。これは罰金の対象になりました。今、サンプルコードをダウンロードしてコンパイルしようとしましたが、リンクエラーが発生しました。openssl-1.1.0cとのリンクエラー
rm -f ./cert.o
gcc -c -o cert.o cert.c
gcc -Wall -g -fPIC -I../../libraries/c/openssl-1.1.0c/include/openssl -o cert ./cert.o ../../libraries/c/openssl-1.1.0c/libssl.a ../../libraries/c/openssl-1.1.0c/libcrypto.a -lpthread -ldl
./cert.o: In Funktion `main':
cert.c:(.text+0x48d): Nicht definierter Verweis auf `sk_new_null'
cert.c:(.text+0x4d4): Nicht definierter Verweis auf `sk_push'
cert.c:(.text+0x74e): Nicht definierter Verweis auf `sk_free'
collect2: error: ld returned 1 exit status
Makefile:13: die Regel für Ziel „cert“ scheiterte
make: *** [cert] Fehler 1
のMakefile:
appname := cert
CC := gcc
CCFLAGS := -Wall -g -fPIC -I../../libraries/c/openssl-1.1.0c/include/openssl
LDLIBS := ../../libraries/c/openssl-1.1.0c/libssl.a ../../libraries/c/openssl-1.1.0c/libcrypto.a -lpthread -ldl
srcfiles := $(shell find . -maxdepth 1 -name "*.c")
objects := $(patsubst %.c, %.o, $(srcfiles))
all: clean $(appname)
$(appname): $(objects)
$(CC) $(CCFLAGS) $(LDFLAGS) -o $(appname) $(objects) $(LDLIBS)
clean:
rm -f $(objects)
ので、私は "sk_new_null" のために見てきたが、 "/usr/include/openssl/stack.h" でそれを見つけました。 openssl-1.1.0cでは、名前が "OPENSSL_sk_new_null"に変更されました。
私は間違ったヘッダーファイルを探します。 私はCでnoobです。どうすればMakefileを変更できますか?
通常は、 'openssl'を含めない*インクルードパスを使用します。つまり、 '-I ../../ libraries/c/openssl-1.1.0c/include'を使用します。 '-I ../../ libraries/c/openssl-1.1.0c/include/openssl'ではありません。そしてあなたのプログラムでは、#include 'を実行します。また、私は、ライブラリ/アーカイブが 'openssl-1.1.0c/lib/libssl.a'にあることを期待しています。 'openssl-1.1.0c/libssl.a'ではありません。しかし、私は両方が間違っている可能性があるため、あなたの設定に物事がどこにあるのかがわかりません。 –
jww