【发布时间】:2020-04-18 15:32:45
【问题描述】:
我在与我创建的静态库链接时遇到问题。这是我的目录结构:
test
├── b.c
├── b.o
├── i.h
├── libb.a
└── t
└── a.c
这是每个文件的内容:
i.h:
#include <stdio.h>
void f (int);
#define LENGTH 4
b.c:
#include "i.h"
void f (int i)
{
printf ("from b.c: %d\n", i);
}
交流电:
#include "../i.h"
int main (void)
{
f (23);
printf ("%d\n", LENGTH);
}
为了构建b.o,我发布了:gcc -c i.h b.c。为了构建libb.a,我发布了:ar rcs libb.a b.o。
命令gcc ../b.o a.c(当从test/t 内部发出时,会产生a.out,它按预期运行。问题是当我尝试使用gcc -L.. -lb a.c 从内部test/t 链接libb.a 时。链接器在抱怨:
$ gcc -L.. -lb a.c
/usr/bin/ld: /tmp/ccbT50MJ.o: in function `main':
a.c:(.text+0xa): undefined reference to `f'
collect2: error: ld returned 1 exit status
请让我知道我在这里缺少什么。
【问题讨论】:
-
不要将
.h文件作为参数传递给gcc。跟他们没什么关系。如果需要,单独的 C 文件将包含它们。并将您的库选项放在依赖它们的 C 文件之后,否则它将跳过它们。
标签: c linker static-libraries static-linking