[英]Include a source file in a C program
如何在这个小程序中包含foo.c的foo()函数(对不起我的noob问题):
在我的foo.h文件中:
/* foo.h */
#include <stdio.h>
#include <stdlib.h>
int foo(double largeur);
在foo.c中:
/* foo.c */
#include <stdio.h>
#include <stdlib.h>
#include "foo.h"
int foo(double largeur)
{
printf("foo");
return 0;
}
在main.c:
/* main.c */
#include <stdio.h>
#include <stdlib.h>
#include "foo.h"
int main(int argc, char *argv[])
{
printf("Avant...");
foo(2);
printf("Apres...");
return 0;
}
编译后:
$ gcc -Wall -o main main.c
我收到此错误:
未定义的符号:“_ foo”,引用自:ccerSyBF中的_main.l ld:未找到符号collect2:ld返回1退出状态
谢谢你的帮助。
$ gcc -Wall -o main main.c foo.c
如果你不告诉它,GCC不知道要查找foo.c
:)
在C中创建程序需要两个步骤,编译和链接。 要运行编译部分,请使用gcc
的-c
选项:
gcc -c main.c
这将创建一个目标文件main.o
(或Windows上的main.obj
)。 同样适用于gcc -c foo.c
在此阶段您不会收到上面的错误消息。 然后将这两个目标文件链接在一起。 在此阶段,符号foo
被解析。 你得到了错误信息的原因是因为链接器找不到符号,因为它是只盯着main.o
而不是foo.o
。 链接器通常从gcc
运行,因此要链接目标文件并创建最终的可执行文件main
,请使用
gcc -o main main.o foo.o
您还必须编译foo.c
因为它是另一个模块。 让我看看他们是如何在gcc
做到的:
$ gcc -Wall main.c foo.c -o main
您也可以在MakeFiles中执行此操作,如下所示:
APP_NAME = Foo
Foo_HEADERS = foo.h
Foo_FILES = main.c foo.c
如果您对MakeFiles不太熟悉,我建议您查看Make Docs ,但这是一个简单的示例, APP_NAME
设置已编译可执行文件的名称(在本例中为Foo), Foo_HEADERS
将设置使用的标头通过您的应用程序,您将设置应用程序的源文件Foo_FILES
,记得将APP_NAME
(在本例中为Foo)放在_HEADERS
和_FILES
的开头。 我建议您使用MakeFiles,因为它们将组织您的应用程序构建过程,并且对最终用户更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.