首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual 2010 LibTomCrypt生成或库链接错误

Visual 2010 LibTomCrypt生成或库链接错误
EN

Stack Overflow用户
提问于 2013-03-21 20:07:04
回答 1查看 1.8K关注 0票数 3

使用整个LibTomCrypt源代码,我使用Visual 2010构建了一个库文件,该文件编译时没有问题。但是,在创建链接with TomCrypt库的简单测试控制台应用程序时,我会收到以下代码的链接器错误:

测试代码

代码语言:javascript
复制
#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;
}

链接器误差

代码语言:javascript
复制
error LNK1120: 1 unresolved externals
error LNK2001: unresolved external symbol _aes_desc

有趣的是,调试库构建与测试代码完美地工作在一起。tomcrypt.lib的发行版构建似乎缺少了一些符号。

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

我希望有人能为我自己和其他经历过这个问题的人提供一些见解。

EN

回答 1

Stack Overflow用户

发布于 2013-08-08 22:34:12

我今天遇到了一个相关的问题。该项目为visual studio提供了构建美学.c的自定义步骤,但只包含Debug构建。一旦我为版本构建做了类似的准备,一切都很好。

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

代码语言:javascript
复制
    <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>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15557035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档