测试项目共三个文件,内容如下:
add.c
int add(int a, int b)
{
return a+b;
}
sum.c
extern int add(int a, int b);
int sum(int a, int b, int c)
{
return add(a, add(b, c));
}
main.c
#include <stdio.h>
extern int add(int a, int b);
extern int sum(int a, int b, int c);
void main(void)
{
// printf("a+b=%d\n", add(1,2));
printf("a+b+c=%d\n", sum(1, 2, 3));
return;
}
add.c sum.c 各编译成静态库
LinuxUbuntu:~/testlib$ gcc -c -o add.o add.c
LinuxUbuntu:~/testlib$ ar rcs add.a add.c
LinuxUbuntu:~/testlib$ gcc -c -o sum.o sum.c
LinuxUbuntu:~/testlib$ ar rcs sum.a sum.c
链接,出现问题
LinuxUbuntu:~/testlib$ gcc -c -o main.o main.c
#include <stdio.h>
extern int add(int a, int b);
extern int sum(int a, int b, int c);
void main(void)
{
printf("a+b=%d\n", add(1,2));
printf("a+b+c=%d\n", sum(1, 2, 3));
return;
}
LinuxUbuntu:~/testlib$ gcc main.o add.a sum.a -o main
sum.a(sum.o): In function `sum':
sum.c:(.text+0x14): undefined reference to `add'
sum.c:(.text+0x23): undefined reference to `add'
collect2: ld returned 1 exit status
当把main.c 的 printf("a+b=%d\n", add(1,2)); 的注释符去掉,链接成功