在链接的libssl GCC和libcrypto [复制]在链接的libssl GCC和libcry

2019-05-12 05:01发布

这个问题已经在这里有一个答案:

  • 错误引用了一堆悬而未决的OpenSSL符号的明确存在吗? 1个回答

我试图使用OpenSSL的EVP接口做一些加密。 我敢肯定,我的代码是正确的,但我似乎无法得到它的编译。 我使用的海湾合作委员会,并与安装的libssl-dev的,并在最新版本的Ubuntu 32位精确。

目前该项目由一个文件中, program.c

#include <openssl/evp.h>
...
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 。 我最好的猜测是,这是它的一个愚蠢的位置,这就是为什么我的链接失败,所以我试图-L/usr/lib/i386-linux-gnu-lcrypto没有运气也是如此。

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

我有点难倒了。 如果有人想给我的感觉像一个傻瓜,我会很高兴地找出我做错了!

Answer 1:

原来,这是愚蠢的东西。 在连接基步骤中,我使用gcc -Wall -g -lssl -lcrypto -o program program.o 。 我需要到图书馆链接移动到目标文件,我链接后,放libssllibcrypto

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


Answer 2:

尝试包括使用-I选项报头,使用-L观察目录的图书馆,并最终指定与-l库名

只是让猜测在这里,请根据实际位置来指定路径。

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

希望对大家有所帮助。



文章来源: Linking libssl and libcrypto in GCC [duplicate]