zoukankan      html  css  js  c++  java
  • 用gcc链接重复定义的函数

    我在本地目录定义了dg_cli()函数,在一个Archieve File中也定义了这个函数。

    本地目录中的dgcliconnect.c 中就是这个函数的定义。另一个同样的函数在../libunp.a中。

    dgcliconnect.c 编译之后的文件为 dgcliconnect.o。

    链接的时候,先链接本地的.o文件,再链接库文件,不会出错:

    cattz@Ubuntu:~/unp/unpv13e/cattz$ gcc -o udpcli udpcli.o dgcliconnect.o /home/cattz/unp/unpv13e/libunp.a

    如果把库文件放在前面,就会出错:

    cattz@Ubuntu:~/unp/unpv13e/cattz$ gcc -o udpcli udpcli.o /home/cattz/unp/unpv13e/libunp.a dgcliconnect.o
    dgcliconnect.o: In function `dg_cli':
    dgcliconnect.c:(.text+0x0): multiple definition of `dg_cli'
    /home/cattz/unp/unpv13e/libunp.a(dg_cli.o):/home/cattz/unp/unpv13e/lib/dg_cli.c:5: first defined here
    dgcliconnect.o: In function `dg_cli':
    dgcliconnect.c:(.text+0x67): undefined reference to `Write'
    dgcliconnect.c:(.text+0x84): undefined reference to `Read'


    所以,在进行链接操作时,要把库文件写在最后,这样才不会和自己写的文件发生冲突。

    Makefile中是这样写的:

    udpcli: udpcli.o dgcliconnect.o
            $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
  • 相关阅读:
    CentOS 7/8修改系统运行级别
    Sketchup 汇总
    [转]Ruby之类的真相
    [转]Ruby之代码块的迷思
    [转]ruby中的异常处理
    [转]ruby中Class的allocate
    [转]ruby中require和load的区别
    [转]ruby之方法查找
    [转]ruby之动态方法
    [转] ruby之对象体系
  • 原文地址:https://www.cnblogs.com/wangshuo/p/2023325.html
Copyright © 2011-2022 走看看