繁体   English   中英

为什么CC在标头中看不到我的函数定义?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM