【问题标题】:Compiling with gcc including .h files?使用包含 .h 文件的 gcc 进行编译?
【发布时间】:2013-07-07 20:51:01
【问题描述】:

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

encrypt.c
decrypt.c
rijndael .h

将所有这 3 个文件放在同一个文件夹中,我尝试编译 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 文件中

【问题讨论】:

  • 错误信息是什么?
  • 根据您拆分源代码的方式,您还需要编译 rijndael.c。

标签: c gcc compilation header-files


【解决方案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中使用的一些函数有定义

【讨论】:

  • 你的意思是 rijndael.c 没有main 函数,对吧?
  • @Diego:是的。您在评论中提到 rijndael.c 没有 main 函数。
  • 谢谢@ionela.voinescu,到目前为止我必须编译它......我真的搞砸了这些东西。我应该试试这段代码,但没有得到好的结果。你能帮忙吗?
  • @Diego:不客气!您应该发布另一个问题,说明您遇到的问题。也许我或其他人可以提供帮助。
【解决方案2】:

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

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

【讨论】:

  • 我试过了,但后来我意识到 rijndael.c 中没有 main 函数
猜你喜欢
  • 2015-04-27
  • 2012-01-10
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2013-03-01
  • 1970-01-01
相关资源
最近更新 更多