使用整个 LibTomCrypt 源,我用 Visual Studio 2010 构建了一个库文件,它可以毫无问题地编译。但是,当创建一个简单的测试控制台应用程序链接 TomCrypt 库时,我收到以下代码的链接器错误:
测试代码:
#include <stdio.h>
#include <tomcrypt.h>
int main()
{
int Cipher;
register_cipher( &aes_desc );
Cipher = find_cipher( "aes" );
if( Cipher != CRYPT_OK )
return 0;
printf( "Cipher name: %s\n", cipher_descriptor[ Cipher ].name );
unregister_cipher( &aes_desc );
return 0;
}
链接器错误:
error LNK1120: 1 unresolved externals
error LNK2001: unresolved external symbol _aes_desc
有趣的是,调试库构建与测试代码完美配合。似乎缺少一些符号的是tomcrypt.lib的发布版本。
现在我对构建和使用库文件并不陌生,但我想知道,是否有一些特定的编译器标志或预防措施可以在发布模式下构建库并让它在我的测试程序中正确链接?是否可能是在 LibTomCrypt 代码中定义的静态 aes_desc 结构通过一些编译器优化从库的发布版本中丢失?
我希望有人可以为我自己和遇到此问题的其他人提供一些见解。