使用包含.h文件的gcc进行编译?

时间:2013-07-07 20:51:02

标签: c gcc compilation header-files

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

  
    

encrypt.c
    的 decrypt.c
    的 rijndael.h

  

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

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

gcc -o encrypt encrypt.cgcc -o decrypt decrypt.c

我得到了:

  
    

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

  

但是rijndaelSetupEncryptrijndaelEncrypt位于rijndael.h文件中

2 个答案:

答案 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中使用的函数的定义