链接错误(collect2:ld返回1)

时间:2012-11-16 16:53:27

标签: c++ linker md5

好的,所以我已经经历了这个错误的各种情况,到目前为止我还没有弄清楚这次究竟是什么导致它(我有点诵读困难,所以道歉,如果它是我不停地看着这样的问题:Undefined reference to main - collect2: ld returned 1 exit statusQtCreator build returns collect2: ld returned exit status 1,但这些类型的案例看起来并不合适。

我正在编写一个程序,该程序会在编辑完邮件后自动重新签名。签名函数接收一些信息,用md5哈希(我知道,但遗留的要求),然后用Base64编码输出(通过const unsigned char *获取一系列字节,以及消息的总大小)< / p>

我首先尝试使用Crypto ++ libray for MD5,它将在未来为其他哈希和协议提供扩展。在链接阶段出现大量未定义的引用错误之后,我尝试了另一个在线发现的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作为文件名,&#39; -o MessageSigner.exe&#39;

-Jimmy

1 个答案:

答案 0 :(得分:1)

您必须将您的程序与您正在使用的库链接。添加-lmd5或将您的库调用到g ++命令,并在必要时添加库路径(选项-Lpath)

如果您不使用库而是将md5.h和md5.cpp复制到源目录中,则必须将md5.cpp添加到编译器调用中。