共享2 .c文件之间的功能

时间:2011-10-14 21:30:33

标签: c header-files

dir1有dir2,file1.c和file1.h。

dir2有file2.c

现在,如果我想访问file2.c中file1.c中定义的函数,我需要在file1.h中声明它并在file2.c中包含file1.h - 这是一个有效的假设吗?

如果不是,请解释。

如果是,即使这样做,我得到“未定义的函数引用”错误。

  

file2.c:29:对`function'的未定义引用   collect2:ld返回1退出状态    * 错误代码1

3 个答案:

答案 0 :(得分:3)

编译c程序分两步执行:编译和链接。编译将源代码转换为目标代码,链接将目标代码放在一起,并将所有符号绑定在一起。

您的问题是链接器问题,而不是编译器问题。

您可能正在运行以下内容:

gcc dir_2/file2.c

相反,请执行以下操作:

gcc -c dir_2/file2.c
gcc -c file1.c
gcc -o out file1.o file2.o

原因发生这种情况并不是因为您没有在标头中声明该功能,或者没有正确包含标头。当链接器尝试将所有符号放在可执行文件中时,它找不到您的函数,因为您只链接程序的 half

答案 1 :(得分:2)

包含.h文件是不够的,因为它只包含该函数的原型而不是函数的定义,函数的定义是在单独的.c文件中。

修复它的一种方法就是键入:

gcc -o out file1.c file2.c

或者Nate说你可以分开编译过程和链接过程

答案 2 :(得分:-1)

现在,如果要访问在file2.c中的file1.c中定义的函数

在FILE1.c中定义的功能 从FILE2.c访问 示例函数:void sync(all){start sync ...}

需要File2.h

包括File1.h

在File2.c上需要AND

包括File1.h

没什么!

我总是在File2.h中也使用关键字EXTERN

示例:

extern void sync(all);

投票也有效,选择自己感觉更好的东西,当我看到 编码期间发生了什么。 想象其他团队成员必须检查您的代码,这将变得更加困难...