Static 与openssl-1.1.0c的链接错误

Static 与openssl-1.1.0c的链接错误,static,linker,openssl,Static,Linker,Openssl,我使用的是Ubuntu 16.10,它在1.0.2g版本中使用openssl。我从网站上下载了最新的源代码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 .

我使用的是Ubuntu 16.10,它在1.0.2g版本中使用openssl。我从网站上下载了最新的源代码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
生成文件:

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)
所以我在“/usr/include/openssl/stack.h”中查找了“sk_new_null”。 在openssl-1.1.0c中,它被重命名为“openssl_sk_new_null”

我认为,它会查找错误的头文件。
我是C中的noob,如何更改生成文件?

我更改了错误的路径,但几乎没有效果,还缺少引用。它似乎使用了“/usr/include”中的一些openssl头

但我学到了一个重要的教训,使用“makeinstall”。我已将openssl-1.1.0c配置为前缀路径为“../../libraries/c/usr”。对于nanomsg,我也这么做了

然后我在CFLAGS中添加“-I.././libraries/c/usr/include”和“-L.././libraries/c/usr/lib”。它起作用了。我可以静态和动态链接到这些库,它使用正确的头文件


现在,我将始终将其安装到相对路径并指向它。

通常您使用的包含路径不包括尾部的
openssl
。即,使用
-I..//库/c/openssl-1.1.0c/include
;而不是
-I..//libraries/c/openssl-1.1.0c/include/openssl
。然后,在您的程序中,您将#包括。另外,我希望库/档案位于
openssl-1.1.0c/lib/libssl.a
;而不是
openssl-1.1.0c/libssl.a
。但我可能在这两方面都错了,因为我不清楚你的设置中的东西在哪里。