关于 c:Openssl 编译错误 | 珊瑚贝

Openssl compile error


我使用 openssl 库在 C 代码中包含以下头文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <time.h>
#ifdef __VMS
#include <in.h>
#include <inet.h>
#else
#include <netinet/in.h>
#include
#endif
#include <openssl/crypto.h>
#include <openssl/ssl.h>
#include <openssl/err.h>

然后我使用 gcc -o openssl -lssl -lcrypt openssl.c 编译了程序
在我的办公室里,这段代码编译并运行良好,但在我家系统中(办公室里都是 linux-debian 6,家里是 Ubuntu 12.04),它给出了以下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/tmp/ccZcmLk4.o: In function `main‘:
server.c:(.text+0x3d): undefined reference to `SSL_library_init’

server.c:(.text+0x42): undefined reference to `SSL_load_error_strings
server.c:(.text+0x47): undefined reference to `SSLv3_method’

server.c:(.text+0x57): undefined reference to `SSL_CTX_new
server.c:(.text+0x6f): undefined reference to `ERR_print_errors_fp’

server.c:(.text+0x97): undefined reference to `SSL_CTX_use_certificate_file
server.c:(.text+0xa8): undefined reference to `ERR_print_errors_fp’

server.c:(.text+0xd0): undefined reference to `SSL_CTX_use_PrivateKey_file
server.c:(.text+0xe1): undefined reference to `ERR_print_errors_fp’

server.c:(.text+0xf9): undefined reference to `SSL_CTX_check_private_key
server.c:(.text+0x154): undefined reference to `SSL_CTX_load_verify_locations’

server.c:(.text+0x165): undefined reference to `ERR_print_errors_fp
server.c:(.text+0x18d): undefined reference to `SSL_CTX_set_verify’

server.c:(.text+0x1a1): undefined reference to `SSL_CTX_set_verify_depth
server.c:(.text+0x397): undefined reference to `SSL_new’

server.c:(.text+0x3c2): undefined reference to `SSL_set_fd
server.c:(.text+0x3ce): undefined reference to `SSL_accept’

server.c:(.text+0x3e6): undefined reference to `ERR_print_errors_fp
server.c:(.text+0x3fe): undefined reference to `SSL_get_current_cipher’

server.c:(.text+0x406): undefined reference to `SSL_CIPHER_get_name
server.c:(.text+0x42e): undefined reference to `SSL_get_peer_certificate’

server.c:(.text+0x455): undefined reference to `X509_get_subject_name
server.c:(.text+0x46d): undefined reference to `X509_NAME_oneline’

server.c:(.text+0x4b1): undefined reference to `X509_get_issuer_name
server.c:(.text+0x4c9): undefined reference to `X509_NAME_oneline’

server.c:(.text+0x50d): undefined reference to `X509_free
server.c:(.text+0x593): undefined reference to `SSL_write’

server.c:(.text+0x5ab): undefined reference to `ERR_print_errors_fp
server.c:(.text+0x5d3): undefined reference to `SSL_read’

server.c:(.text+0x5eb): undefined reference to `ERR_print_errors_fp
collect2: ld returned 1 exit status

我知道这是因为我的家用电脑中没有某些库。但是谁能告诉我需要为此安装哪些库?提前致谢。


将库放在源文件之后:

1
gcc o openssl openssl.c lssl lcrypto

参见:http://www.network-theory.co.uk/docs/gccintro/gccintro_18.html

  • 嗯,这行得通。但它返回了一个我没有在办公室得到的警告。 server.c: In function ‘main’: server.c:55:7: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default] 恐怕我不得不粘贴整个代码来告诉你问题出在哪里。但它肯定不在办公室。
  • @Hari您使用的是不同的编译器版本,是吗?在编译期间调整标志以协调警告或习惯不同的编译器输出。最好在两个位置使用相同的编译器版本。
  • 我必须做 -lssl -lcrypto (注意’o’!)以避免神秘的 undefined reference to symbol PEM_read_bio_DHparams


将文件名放在 -l 选项之前


来源:https://www.codenong.com/10994327/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9514.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?