我正在尝试在gcc程序中使用openssl,但它无法正常工作。
g++ server.cpp /usr/lib/libssl.a -o server
给出错误消息,与-l
选项一样。我必须在命令行上键入什么才能与openssl链接?文件/usr/lib/libssl.a
存在,但我仍然收到链接器错误no such function MD5() exists
。
答案 0 :(得分:24)
如果不知道您所看到的确切错误,很难提供准确的解决方案。这是我最好的尝试。
根据您提供的信息,听起来好像链接器失败,因为它找不到md5
中libssl.a
函数的引用。我相信这个函数实际上在libcrypto
中,所以你可能也需要指定这个库。
g++ server.cpp -L/usr/lib -lssl -lcrypto -o server
答案 1 :(得分:11)
您或其他人可能会发现这篇文章developerWorks有用。
它描述了使用OpenSSL和C / C ++开展工作所需要了解的大部分内容。如果您发现您正在遵循大多数相同的步骤,那么它可能会帮助您了解需要做什么。
祝你好运。答案 2 :(得分:5)
在Eclipse IDE中,选择您的项目属性 - > c / c ++ Build - >设置gcc c链接器(来自工具设置) - >添加到库搜索路径(-L)
/ usr / lib -lssl -lcrypto
答案 3 :(得分:1)
库的位置不固定。就我而言(Ubuntu 18.04),. a文件位于/usr/lib/x86_64-linux-gnu/
中。因此,这是完整的步骤:
sudo apt install libss-dev
dpkg-query -L libssl-dev
3)更改gcc标志-L(library directory) -l(library name)
,例如
gcc XXX.c XXXXX.c -L/usr/lib/x86_64-linux-gnu/ -lcrypto -lssl
答案 4 :(得分:0)
除了接受的答案之外,我无法编译AES-CCM的OpenSSL示例:
https://github.com/openssl/openssl/blob/master/demos/evp/aesccm.c
为了使它工作,我需要再添加两件事:
-ldl
-pthread
(使用-lpthread直接添加库not recommended)