2017-01-05 12 views
0

私は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を変更できますか?

+0

通常は、 '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

答えて

0

私は間違ったパスを変更しましたが、ほとんど効果がなく、欠落している参照もありました。それは "/ usr/include"の中のいくつかのopenssl-headersを使っていたようです。

しかし私は大きな教訓を学んだので、 "make install"を使ってください。私は "../../libraries/c/usr"へのプレフィックスパスでopenssl-1.1.0cを設定しました。 nanomsgで私は同じことをしました。

次に、 "-I ../../ libraries/c/usr/include"と "-L ../../ libraries/c/usr/lib"をCFLAGSに追加します。できます。私はこれらのライブラリに静的かつ動的にリンクすることができ、正しいヘッダファイルを使用します。

私はいつもこれを相対パスにインストールし、それを指します。