在GCC中链接libssl和libcrypto

我正在尝试使用OpenSSL的EVP接口进行一些加密。 我很确定我的代码是正确的,但我似乎无法编译它。 我正在使用GCC,并且安装了libssl-dev的Ubuntu 32位精确版和最新版本。

该项目目前包含一个文件program.c

 #include  ... i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1() ... ); ... EVP_CIPHER_CTX_init(e_ctx); 

以及其他各种电话。

这是我如何调用gcc:

 gcc -Wall -g -lssl -lcrypto -o program program.c 

然后我得到这样的输出

 /home/andy/program/program.c:31: undefined reference to `EVP_sha1' /home/andy/program/program.c:31: undefined reference to `EVP_aes_256_cbc' /home/andy/program/program.c:31: undefined reference to `EVP_BytesToKey' /home/andy/program/program.c:44: undefined reference to `EVP_CIPHER_CTX_init' 

所以包含显然在起作用:

 andy@ProgStation2:/usr/include$ find . | grep evp.h ./openssl/evp.h 

这是locate libcrypto的输出。 我最好的猜测是,这是一个愚蠢的位置,这就是我的链接失败的原因,所以我在-lcrypto之前尝试了-L/usr/lib/i386-linux-gnu-lcrypto没有运气。

 /lib/i386-linux-gnu/libcrypto.so.1.0.0 

我有点难过。 如果有人想让我觉得自己像个傻瓜,我会非常兴奋地弄清楚我做错了什么!

事实certificate这是一个愚蠢的事情。 在链接器步骤中,我使用的是gcc -Wall -g -lssl -lcrypto -o program program.o 。 我需要将库链接移动到我链接的目标文件之后,并将libssl放在libcrypto之前:

 gcc -Wall -g -o program program.o -lssl -lcrypto 

尝试使用-I选项包含标题,使用-L查看库的目录,最后使用-l指定库名

在这里猜猜,请根据实际位置指定路径。

 gcc -g -Wall -L/usr/lib -I/usr/include -lssl -lcrypto -o program program.c 

希望它可能有所帮助。