好的,所以我一直在经历这个错误的各种案例,到目前为止,我还无法弄清楚这次是什么原因造成的(我有点阅读障碍,如果它盯着我的脸,我深表歉意) 我一直在寻找对此类问题的引用:对 main 的未定义引用 - collect2:ld 返回 1 退出状态和QtCreator build 返回 collect2:ld 返回退出状态 1但这些类型的情况似乎不适合。
我正在编写一个程序,它会在消息被编辑后自动重新签名。签名函数接收一些信息,使用 md5 对其进行哈希处理(我知道,但有遗留要求),然后使用 Base64 对输出进行编码(通过 const unsigned char* 获取一系列字节,以及消息的总大小)
我首先尝试了 MD5 的 Crypto++ 库,它会在未来为其他哈希和协议提供扩展。在链接阶段出现大量未定义的引用错误后,我尝试了我在网上找到的另一个 md5 实现。这个只给了我两个链接错误,但我认为它们可能是由相同的原因引起的,所以我将使用第二个库以节省帖子空间。
我用于消息签名的 C++ 代码片段:
string createMessageSignature(string input)
{
//byte digest[ CryptoPP::MD5::DIGESTSIZE ];
//CryptoPP::MD5().CalculateDigest( digest, (byte*) input.c_str(), input.length() );
//cout << "md5 signature: " << digest << endl;
//string encodedDigest = base64_encode(digest, 32);
int size = md5(input).length();
string stringDigest = md5(input);
const unsigned char* digest = reinterpret_cast<const unsigned char*>(stringDigest.c_str());
cout << "md5 signature hash: " << digest << endl;
string encodedDigest = base64_encode(digest, size);
cout << "signature base64 encoded: " << encodedDigest << endl;
return encodedDigest;
}
我目前正在使用的 md5 库在这里:http ://www.zedwood.com/article/121/cpp-md5-function (虽然我想最终转向 Crypto++,或者可能是 OpenSSL)。
来自链接器的错误消息(在 Win7 上使用 MinGW,但在 linux 环境中的 GCC 上也会发生):
C:\Users\j********\Desktop\MessageSigner>C:/MinGW/bin/g++ -o MessageSigner.exe M
essageSigner.cpp
C:\Users\J****~1\AppData\Local\Temp\ccLejcEo.o:MessageSigner.cpp:(.text+0xc54):
undefined reference to `md5(std::string)'
C:\Users\J****~1\AppData\Local\Temp\ccLejcEo.o:MessageSigner.cpp:(.text+0xc9f):
undefined reference to `md5(std::string)'
collect2: ld returned 1 exit status
有什么想法吗?一切似乎都已定义,并且代码可以编译。我从来没有太多调试链接器错误的经验。我一直在使用的唯一编译选项是 -o 文件名,'-o MessageSigner.exe'
-吉米