【发布时间】:2010-12-23 14:51:20
【问题描述】:
我的主目录中有以下目录。
来源
包括
库
在源目录中我有以下文件:
a.c
#include <stdio.h>
#include "a.h"
extern void function(void);
int main()
{
printf("PREDEFINED = %d\n",PREDEFINED);
function();
return 0;
}
b.c
#include <stdio.h>
void function()
{
printf("Hello from function\n");
}
a.h
#define PREDEFINED 100
我编译 b.c 并将 b.o 移动到 Lib 文件夹。
然后我从source文件夹尝试了以下命令
gcc -Wall -o temp a.c -I../include -L../Lib
但它显示以下错误
a.c: undefined reference tofunction``
但是当我使用以下命令时,它会生成输出文件temp 而没有任何错误
gcc -Wall -o temp a.c -I../include ../Lib/b.o
我哪里错了?
【问题讨论】:
-
你真的应该在头文件中定义
function(),例如“b.h”并将其包含在“a.c”中。不管怎样,你到底想做什么?将“b.c”构建为库?您的制造系统非常不标准。对于快速的命令行构建,更常见的做法是将所有 C 文件同时编译成可执行文件,而不用打扰目标文件。对于正确的 make 系统,通常将所有 C 文件编译成目标文件,然后将它们链接到可执行文件中。你有一个混合在这里。
标签: c compiler-construction linker linker-errors