通过包含其标题来使用来自另一个c文件的函数

时间:2015-03-15 20:23:03

标签: c linux function

我在Linux系统上编写C代码(而不是C ++)。我正在尝试从2个.c文件和1个头文件中编译一个可执行文件:main.c,sort.c和sort.h。

main.c的第一行是:#include "sort.h"

在sort.h中,sort.c中的每个函数都像这个例子一样定义: extern void aFunct(int param);

但是,当我尝试从main.c调用sort.c中的函数时,编译时出现以下错误:“未定义引用'aFunct'”。

如果我将#include "sort.h"替换为#include "sort.c"我的程序可以正常运行。但是,据我所知,这是不好的形式,我宁愿避免这种情况。谢谢你的帮助。

编辑:我正在用包含以下代码的makefile编译它:

all: index sort.o

sort.o: sort.c sort.h
    gcc -Wall -g -c sort.c

index: main.c sort.o
    gcc -Wall -g -o index main.c

clean:
    rm index
    rm sort.o

编辑:我已修复此问题。问题不是源于对C文件的误解以及它们如何链接,而是源于对makefile / gcc命令的误解。我的程序使用以下makefile:

all: index sort.o

sort.o: sort.c
    gcc -Wall -g -c sort.c

index: main.c sort.o
    gcc -Wall -g -o index main.c sort.o

clean:
    rm sort.o
    rm index

2 个答案:

答案 0 :(得分:1)

您还应该在sort.c中包含#include“sort.h”。 你可能已经这样做了。

重要的是,您需要确保构建.c文件[main.c和sort.c]

现在这两个obj文件[main.o和sort.o]应该是链接器的输入。

根据我的猜测,你没有编译sort.c,所以链接器无法看到函数的实现。

答案 1 :(得分:0)

当您将一个源代码文件包含到其他文件(例如#include "sort.c")时,如果将sort.c文件包含到同一项目的多个c文件中,则可能会遇到麻烦。但据我所知,你只需编译一个包含sort.c的c文件......这样就行了。但是,更好地阅读一些教程,例如How to Create Multi-Module Programs