首页 > 其他 > 详细

程序的链接

时间:2021-05-28 09:43:30      阅读:24      评论:0      收藏:0      [点我收藏+]

程序的链接

提出问题

程序在编译过程中,有时候会碰到符号冲突无法编译通过的问题,有时候会碰到符号冲突最终只选择了一个的问题,因此本文从链接的角度讨论一下这两个现象的背后原因。

实例

符号冲突无法链接报错的例子

add.c
int add(int a, int b)
{
        return a+b;
}
add2.c
int add(int a, int b)
{
        return a*b;
}
main.c
#include <stdio.h>

int add(int,int);

int main()
{
        int a = add (3,4);
        printf ("3+4=%d\n", a);
        return 0;
}
> gcc -c main.c add.c add2.c
> gcc main.o add.o add2.o
/usr/bin/ld: add2.o: in function `add‘:
add2.c:(.text+0x0): multiple definition of `add‘; add.o:add.c:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

符号冲突最终只选择一个的例子

同样使用上述三个源文件。

> gcc -c main.c add.c add2.c
> ar -rcs libadd.a add.o
> ar -rcs libadd2.a add2.o
> gcc main.o -L. -ladd -ladd2
> ./a.out
3+4=7
> gcc main.o -L. -ladd2 -ladd
> ./a.out
3+4=12

程序的链接

原文:https://www.cnblogs.com/amazzzzzing/p/14820462.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!