天天看點

C++ Builder連結錯誤的解決方法

    最近更換了MD5的加密函數,新函數使用了Indy的TIdHashMessageDigest5。某些工程在連結的時候出現以下錯誤:

[ilink32 Error] Error: Unresolved external 'Idhashmessagedigest::TIdHashMessageDigest5::' referenced from ...

[ilink32 Error] Error: Unresolved external '__fastcall Idhashmessagedigest::TIdHashMessageDigest4::TIdHashMessageDigest4()' referenced from ...

[ilink32 Error] Error: Unresolved external '__fastcall Idglobal::IndyTextEncoding_UTF16LE()' referenced from ...

[ilink32 Error] Error: Unresolved external '__fastcall Idhash::TIdHash::HashStringAsHex(const System::UnicodeString, System::DelphiInterface<Idglobal::IIdTextEncoding>)' referenced from ...

[ilink32 Error] Error: Unable to perform link

備注:以上錯誤資訊中referenced from後面省略了具體的檔案名,用...替代

    在網上搜尋錯誤資訊,出來的網頁結果比較少,比較可信的說法是要添加IndyProtocols包。在工程選項裡,對比連結成功和報錯的工程,并未找到差別。打開相應的工程檔案(*.cbproj),發現能成功連結的工程在<AllPackageLibs>這個TAG裡有IndyProtocols.lib,将IndyProtocols.lib加入到連結失敗的工程檔案中。在IDE裡關閉工程,重新打開工程,連結成功。AllPackageLibs的含義可以參考文章:http://stackoverflow.com/questions/11786900/understanding-package-imports-in-the-cbproj-file。

  但連結出錯的工程比較多,每個工程去修改檔案也比較麻煩。最後在MD5的加密子產品裡加入以下3行,徹底解決問題:

#pragma comment (lib, "IndyCore.lib")

#pragma comment (lib, "IndySystem.lib")

#pragma comment (lib, "IndyProtocols.lib")

繼續閱讀