将错误与openssl-1.1.0c链接

时间:2017-01-05 15:32:17

标签: 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 ../../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)

所以我一直在寻找" sk_new_null"在" /usr/include/openssl/stack.h"中找到了它。 在openssl-1.1.0c中,它被重命名为" OPENSSL_sk_new_null"。

我认为,它会查找错误的标头文件。 我是C中的菜鸟,我如何更改Makefile?

1 个答案:

答案 0 :(得分:0)

我改变了错误的路径,但几乎没有效果,也有错过的引用。它似乎在" / usr / include"中使用了一些openssl-header。

但是我学到了很多教训,使用" make install"。我已将openssl-1.1.0c配置为" ../../ libraries / c / usr"的前缀路径。使用nanomsg,我做了同样的事情。

然后我添加" -I ../../ libraries / c / usr / include"和" -L ../../ libraries / c / usr / lib"到CFLAGS。有用。我可以静态和动态地链接到这些库,它使用正确的头文件。

我现在总是将它安装到相对路径并指向它。