gcc 编译动态库 多个源文件且有依赖性

发布于 2022-09-04 06:50:49 字数 1525 浏览 22 评论 0

今天想要在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

攒眉千度 2022-09-11 06:50:49

-L.写在前面试试,另外nm看下动态库的导出函数

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文