0

我正在尝试从http://www.efgh.com/software/rijndael.htm编译一些 AES 实现代码,我得到了一个 txt 文件并将其拆分,所以我得到了 3 个文件:

加密
.c 解密.c rijndael.h

将所有这 3 个文件放在同一个文件夹中,我尝试编译任何encrypt.c文件decrypt.c,但它会引发一些关于未定义函数的错误,这些函数实际上位于rijndael.h

我正在以这种方式执行编译:

gcc -o encrypt encrypt.c或者gcc -o decrypt decrypt.c

我得到:

/tmp/cch6JvXT.o:在函数中main
encrypt.c:(.text+0x127):未定义对 encrypt.c 的引用rijndaelSetupEncrypt
:(.text+0x1c6):未定义对rijndaelEncrypt
collect2 的引用:错误:ld 返回 1 退出状态

但是rijndaelSetupEncrypt并且rijndaelEncrypt在 rijndael.h 文件中

4

2 回答 2

1

实际上在您的示例中,您应该有 4 个文件,encrypt.c decrypt.c rijndael.c 和 rijndael.h

所以你必须编译 rijndael.c 和 encrypt.c 或与解密相同。.h 文件将在编译包含 .h(头)文件的 c 文件时自动使用。

于 2013-07-07T20:56:06.327 回答
1

“未声明的函数”错误和“未定义的函数”错误之间存在差异。第一个是在找不到您使用的函数的原型(仅指函数头)时给出的,原型通常放在 .h 文件中并包含在 .c 文件中。当它找到原型但没有找到函数的定义时,会出现第二个错误。函数的定义(意味着函数的整个主体)可以在库中或在您应该添加到编译命令的另一个 .c 文件中找到。

对于“未定义的函数”错误,您可以尝试

gcc -o enc_dec encrypt.c decrypt.c

如果它找不到的函数在您提到的两个 .c 文件之一中。如果不是,您可能忘记链接库。

稍后编辑
使用 rijndael.c 文件:

gcc -o decrypt rijndael.c decrypt.c
gcc -o encrypt rijndael.c encrypt.c

如果 rijndael.h 没有函数也没关系main。我想它对decrypt.c和encrypt.c中使用的一些函数有定义

于 2013-07-07T21:04:00.813 回答