我的主目录中有以下目录。
源
包括
库
在源目录中,我有以下文件:
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 to
function``
但是当我使用以下命令时,它会生成输出文件temp
而没有任何错误
gcc -Wall -o temp a.c -I../include ../Lib/b.o
我哪里错了?
答案 0 :(得分:5)
目标文件不是库。试试这个来创建和使用一个简单的静态库:
ar rcs ../Lib/libb.a b.o
gcc -Wall -o temp a.c -I../include -L../Lib -lb
静态库通常包含多个对象。您可以将完整的对象列表添加到ar
行。请注意,选项-l{name}
会使链接器找到名为lib{name}.a
的文件。
答案 1 :(得分:0)
在第一个命令中,您只需将Lib定义为查找库的位置。但是,您没有指定要链接的任何库,并且无论如何库路径都不用于查找目标文件。
在第二个命令中,您明确指定要用作链接器输入的目标文件。
因此,第一个命令找不到函数function()
,而第二个命令则找不到。