gpt4 book ai didi

c++ - Visual Studio 2010 LibTomCrypt 生成或库链接错误

转载 作者:太空狗 更新时间:2023-10-29 21:46:19 33 4
gpt4 key购买 nike

使用整个 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.librelease 版本似乎缺少一些符号。

现在我对构建和使用库文件并不陌生,但我想知道,是否有一些特定的编译器标志或预防措施可以让我在 Release模式下构建库并使其在我的测试程序中正确链接?会不会是在 LibTomCrypt 代码中定义的静态 aes_desc 结构通过某些编译器优化从库的发布版本中丢失了?

我希望有人可以为我自己和其他遇到此问题的人提供一些见解。

最佳答案

我今天刚遇到一个相关问题。 visual studio 的项目配置包括构建 aes.c 的自定义步骤,但仅涵盖调试构建。一旦我为发布版本做了类似的规定,一切都很好。

在文本编辑器中打开 Visual Studio 2010 项目,并将自定义构建步骤替换为以下步骤。这还将修复调试版本的一些警告:

    <CustomBuild Include="src\ciphers\aes\aes.c">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl /nologo /MTd /W3 /Gm /EHsc /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /Fp"Debug/libtomcrypt.pch" /Fo"Debug/" /Fd"Debug/" /FD /RTC1 /c %(FullPath)
cl /nologo /DENCRYPT_ONLY /MTd /W3 /Gm /EHsc /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /Fp"Debug/libtomcrypt.pch" /Fo"Debug/aes_enc.obj" /Fd"Debug/" /FD /RTC1 /c %(FullPath)</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug/aes.obj;Debug/aes_enc.obj;%(Outputs)</Outputs>
</CustomBuild>
<CustomBuild Include="src\ciphers\aes\aes.c">
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl /nologo /MT /W3 /O2 /I "src\headers" /I "..\libtommath" /D "NDEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /Fp"Release/libtomcrypt.pch" /Fo"Release/" /Fd"Release/" /FD /c %(FullPath)
cl /nologo /DENCRYPT_ONLY /MT /W3 /O2 /I "src\headers" /I "..\libtommath" /D "NDEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /Fp"Release/libtomcrypt.pch" /Fo"Release/aes_enc.obj" /Fd"Release/" /FD /c %(FullPath)</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release/aes.obj;Release/aes_enc.obj;%(Outputs)</Outputs>
</CustomBuild>

关于c++ - Visual Studio 2010 LibTomCrypt 生成或库链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557035/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com