我正在编写一个程序来熟悉 OpenSSL、libncurses 和 UDP 网络。我决定使用 OpenSSL 的 SHA256 来熟悉行业加密标准,但我在让它工作时遇到了问题。我已将错误与 OpenSSL 与已编译程序的链接隔离开来。我正在使用 64 位的 Ubuntu 12.10。我安装了软件包 libssl-dev。
以 C++ main.cpp 为例:
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
using namespace std;
#include <openssl/sha.h>
string sha256(const string str)
{
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, str.c_str(), str.size());
SHA256_Final(hash, &sha256);
stringstream ss;
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
{
ss << hex << setw(2) << setfill('0') << (int)hash[i];
}
return ss.str();
}
int main()
{
cout << sha256("test") << endl;
cout << sha256("test2") << endl;
return 0;
}
我正在使用此处找到的 SHA256() 函数作为 OpenSSL 的 SHA256 功能的包装器。
当我尝试使用以下 g++ 参数进行编译时,我收到以下错误:
millinon@myhost:~/Programming/sha256$ g++ -lssl -lcrypto -o main main.cpp
/tmp/ccYqwPUC.o: In function `sha256(std::string)':
main.cpp:(.text+0x38): undefined reference to `SHA256_Init'
main.cpp:(.text+0x71): undefined reference to `SHA256_Update'
main.cpp:(.text+0x87): undefined reference to `SHA256_Final'
collect2: error: ld returned 1 exit status
因此,GCC 清楚地识别了 OpenSSL 定义的函数和类型,但 ld 无法找到 sha.h 中引用的函数符号。
我是否需要手动指向特定的共享对象或目录?
谢谢!