编译代码时出现 LNK2019 错误

Posted

技术标签:

【中文标题】编译代码时出现 LNK2019 错误【英文标题】:LNK2019 error when compiling code 【发布时间】:2011-01-21 08:42:05 【问题描述】:

我有一些在 Visual Studio 2010 中编辑的示例代码,用于使用 DES 进行加密和解密。出于某种原因,当我编译代码时,我不断收到这两个 LNK2019 错误,它们指的是 des_encrypt1() 函数和 des_set_key_checked() 函数。从我的代码中可以看出,我确保包含了 des.h 文件,并且该文件列出了这两个函数的定义。我是 C 的新手,所以我不确定这是否是我忽略的简单事情,但任何帮助将不胜感激。我不确定如何在此处正确附加代码,如果格式看起来很奇怪,我很抱歉,但下面的粗体包含应该是 #include des.h。

#include <des.h>


#define ENC 1
#define DEC 0

//extern des_encrypt1(DES_LONG *data,DES_key_schedule *ks, int enc);

//void des_set_key_checked(const_des_block *key, des_key_schedule *schedule)



int main()


int k;
long    in[2];
static unsigned char cbc_key[8] = 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef;
des_key_schedule key;
//struct timeval start, end;
//double t1, t2, t3, t4;

if ((k = des_set_key_checked(&cbc_key,key)) != 0)
    printf("\nkey error\n");

in[0] = 3212314;
in[1] = 1231233;

printf("DES Clear Text: %ld%ld\n",in[0],in[1]);
//gettimeofday(&start, NULL);
//t1=start.tv_sec+(start.tv_usec/1000000.0);
des_encrypt1(in,key,ENC);
//gettimeofday(&end, NULL);
//t2=end.tv_sec+(end.tv_usec/1000000.0);
//printf("Time for Encryption\n", t2-t1);

printf("DES Encryption: %u%u\n",in[0],in[1]);
//gettimeofday(&start, NULL);
//t3=start.tv_sec+(start.tv_usec/1000000.0);
des_encrypt1(in,key,DEC);
//gettimeofday(&end, NULL);
//t4=end.tv_sec+(end.tv_usec/1000000.0);
//printf("Time for Decryption\n", t4-t3);

【问题讨论】:

您需要将代码块缩进四个空格,并且在代码块的开头上方还有一个空行。然后它会正确显示。 【参考方案1】:

如果您将代码编译为 C++,但标头是为 C 编写的,则需要按如下方式包含它:

extern "C" 
    #include "des.h"

【讨论】:

感谢您的帮助。这肯定消除了 LNK 错误,但现在它说 des_key_scheduler 是一个未声明的标识符,并且它认为它缺少一个 ';'在键之前(如 des_key_schedule 键;)有什么想法吗? 你应该使用struct des_key_schedule key; 而不仅仅是des_key_schedule key; 谢谢。这删除了许多未声明的“key”标识符消息,但现在它抱怨 key 正在使用未定义的结构 des_key_schedule。 实际上忽略了最后一部分,我只是想出了如何修复该错误。丹尼尔罗斯和不,非常感谢您的帮助! 这行(extern "C")有什么原因会返回这个错误(error C2059: syntax error: 'string')吗?【参考方案2】:

你需要从 openssl/ 中包含 des.h

#include <openssl/des.h>

【讨论】:

以上是关于编译代码时出现 LNK2019 错误的主要内容,如果未能解决你的问题,请参考以下文章

错误 LNK2019:使用类编译程序时出现无法解析的外部符号错误消息

Visual C++ 2017,外部“C”被忽略了吗?将 C++ 代码链接到 C 库时出现 LNK2019 错误

错误 LNK2019:未解析的外部符号

编译静态库遇到的 LNK2019 报错

将 DCMTK 与 Visual Studio 一起使用时出现链接器错误 LNK2019

为啥在 Visual Studio 中编译 C++ 项目时出现致命错误“LNK1104:无法打开文件 'cryptlib.lib'?