繁体   English   中英

在C程序中包含源文件

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

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