![](/img/trans.png)
[英]Why the linker does not see my function (define macro to substitute the syslog)?
[英]Why does CC not see my function definition in header?
我正在ANSI C中编写一个简单的应用程序。我在Unix环境中使用GCC。
我有以下示例应用程序:
//main.c
#include "foo.h"
int main()
{
int result;
result = add(1,5);
return0;
}
标头:
//foo.h
#ifndef FOO_H_INCLUDED
#define FF_H_INCLUDED
int add(int a, int b);
#endif
实现方式:
//foo.c
int add(int a, int b)
{
return a+b;
}
我正在使用以下命令编译程序:
cc main.c -o main.o
编译器抱怨“ add
引用未定义”。 这是链接问题吗? 如何正确利用我的标题?
谢谢!
您需要将两个源文件一起编译:
cc main.c foo.c -o main
同样,在这种情况下, -o
生成可执行文件,因此将其main.o
可能会误导您。
还有另一个花絮,尽管与问题无关: foo.h
的#ifndef
和#define
不匹配。
标头不是您当前的问题。 当前的问题是您没有在foo.c
编译add
函数定义。
尝试
cc main.c foo.c -o main.o
如果您试图将main.c编译成一个汇编的目标文件,则需要防止gcc尝试链接。 这是通过
cc -c main.c -o main.o
您可以编译所有其他目标文件,然后在准备好所有目标文件后,只需执行
cc main.o obj1.o anotherOBJ.o -o myExecutableBinary
“未定义的引用”是链接器错误,而不是编译器错误。
编译器会在标头中看到该声明 ,但是您尚未在foo.c中编译或链接该定义 。 您的标题使用了错误的术语定义 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.