我正在尝试从http://www.efgh.com/software/rijndael.htm编译一些AES实现代码,我得到了一个txt文件并将其拆分,因此我得到了3个文件:
的 encrypt.c
的 decrypt.c
的 rijndael.h
将所有这三个文件放在同一个文件夹中,我尝试编译encrypt.c
或decrypt.c
个文件中的任何文件,但它会抛出一些关于未定义函数的错误,这些函数实际上在rijndael.h
我正在以这种方式进行编译:
gcc -o encrypt encrypt.c
或gcc -o decrypt decrypt.c
我得到了:
/tmp/cch6JvXT.o:在函数
main
中:
encrypt.c :(。text + 0x127):对rijndaelSetupEncrypt
的未定义引用
encrypt.c :(。text + 0x1c6):对rijndaelEncrypt
的未定义引用
collect2:错误:ld返回1退出状态
但是rijndaelSetupEncrypt
和rijndaelEncrypt
位于rijndael.h文件中
答案 0 :(得分:1)
实际上在你的例子中,你应该有4个文件,encrypt.c decrypt.c rijndael.c和rijndael.h
所以你必须编译rijndael.c和encrypt.c或者同时使用decrypt编译。在编译包含.h(标题)文件的c文件时,将自动使用.h文件。
答案 1 :(得分: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中使用的函数的定义