gcc 编译动态库 多个源文件且有依赖性
今天想要在linux编译一个动态库,最后链接动态库的时候提示 undefined reference to 'func name'。
gcc -lgg -L. -o test test.c
/tmp/ccMOucMV.o: In function `main':
test.c:(.text+0xa): undefined reference to `go_c'
collect2: error: ld returned 1 exit status
用到的代码如下:
a.h:
void go_a();
a.c:
#include "a.h"
#include"stdio.h"
void go_a()
{
printf("a\n");
}
b.h:
void go_b();
b.c:
#include "a.h"
#include "b.h"
#include"stdio.h"
void go_b()
{
printf("b\n");
go_b();
}
c.h:
void go_c();
c.c:
#include "c.h"
#include "b.h"
#include"stdio.h"
void go_c()
{
printf("c\n");
go_b();
}
test.c
#include"c.h"
int main()
{
go_c();
return 0;
}
依赖关系如下:
c 依赖 b, b 依赖 a 最后 test.c 想要调用 a b c 一起生成的动态库
我的makefile
.SUFFIXES:
.SUFFIXES: .c .o
cc=gcc
CFLAG= -Wall -g
OBJS= c.o b.o a.o
libgg.so:$(OBJS)
$(cc) -fPIC -shared $^ -o $@
.c.o:
$(cc) -fPIC -shared $< -o $@ $(CFLAG) -c
clean:
rm -f *.so
rm -f *.o
makefile 执行完之后,生成libgg.so
接着我在控制台 输入:
gcc -lgg -L. -o test test.c
就会报错,请大神指教。我不是很了解 gcc的用法 , 但是拥有这样的依赖关系的文件在windows下用vs生成动态库是正常的。
十分感谢。O(∩_∩)O
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
-L.
写在前面试试,另外nm
看下动态库的导出函数