iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >如何理解Linux系统下连接器ld链接顺序
  • 474
分享到

如何理解Linux系统下连接器ld链接顺序

2023-06-13 02:06:54 474人浏览 安东尼
摘要

本篇内容主要讲解“如何理解linux系统下连接器ld链接顺序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Linux系统下连接器ld链接顺序”吧!  原来ld对于链接一系列的库的顺序是很

本篇内容主要讲解“如何理解linux系统下连接器ld链接顺序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Linux系统下连接器ld链接顺序”吧!

  原来ld对于链接一系列的库的顺序是很敏感的,不然会报undefined referenced 的函数符号错误,意思就是未找到函数定义。实际上库是能正确打开的。如果库libA.a依赖于库libB.a,那么连接器的参数应该ln -lA -lB,   必须这样写。不然就会错误。

  这个看来是历史的遗留问题。说白了就是,如果你确定某个库不重要,就放到最后,也就是说,库的加载顺序是按顺序进行的,从左到右,优先级最高,这也是远古时代机器太破的原因,内在和硬盘包括CPU都是极其稀罕珍贵的。所以要你提前搞定哪些需要哪些不需要,一旦需要,就加载上去,不需要就不要加载上去。这样就可以解释上面的错误了,编译器加载到Socketcomm后,发现还有依赖库,再往后找,木有咧,于是就错了。

  也就是说,被依赖的尽量放到后面,让大家可以共用。

  这就引申同来了另外一个问题,如果有多个库,使用了相同的函数名或者类名,结构体名称会怎么样?

  可以使用nm和readelf、ldd等命令来查看你的库的依赖和符号表以及导出的函数符号等。这样就可以来验证上面的因为顺序造成的不同的编译结果。

  把测试的库分成动、动;静、静;动静三种情况

  第一种情况:静静库都包含有相同的名字函数

代码如下:

  GCc -L./ main.c -lA -lB

  编译报错,在multiple definition of `XXX‘。重复定义函数。

  第二种情况:动动库

  这个得看加载的顺序,上面说过,从左开始,按需加载。

代码如下:

  gcc main.c ./libB.so ./libA.so

代码如下:

  gcc main.c ./libA.so ./libB.so

  这样的链接方式为隐式链接,或者说加载时链接,而前面的静态库为编译时连接。

  也就是说,编译的顺序确定到底调用哪个库中的同名函数。

  第三种情况:动动,但是是动态加载,而不上面的静态加载。

代码如下:

  gcc main.c -ldl ./libA.so ./libB.so

代码如下:

  gcc main.c -ldl ./libB.so ./libA.so

  没有加链接选项时,跟第二种情况一样。加了L选项后,指定哪上加载哪个。

  libB为静态链接!, libA为动态加载.

代码如下:

  gcc -L./ main.c -ldl –lB

  动态库的库名显示的加载入编译选项中

代码如下:

  gcc -L./ main.c -ldl -lB ./libA.so

代码如下:

  gcc -L./ main.c -ldl ./libA.so -lB

到此,相信大家对“如何理解Linux系统下连接器ld链接顺序”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 如何理解Linux系统下连接器ld链接顺序

本文链接: https://www.lsjlt.com/news/264536.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解Linux系统下连接器ld链接顺序
    本篇内容主要讲解“如何理解Linux系统下连接器ld链接顺序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Linux系统下连接器ld链接顺序”吧!  原来ld对于链接一系列的库的顺序是很...
    99+
    2023-06-13
  • Linux系统连接Redis命令如何理解
    Linux系统连接Redis命令如何理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 Redis 可以支持如下连接方式:通过客户端工具连接、通过数据库管理工具 DMC 连...
    99+
    2023-06-28
  • Linux系统硬链接怎么理解
    本篇文章为大家展示了Linux系统硬链接怎么理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Linux系统中硬链接是什么呢?1、打开LINUX操作系统,可以使用UBUNTU。2、找到左边任务栏的终...
    99+
    2023-06-28
  • Linux系统如何辨别软链接和硬链接
    这篇文章主要介绍“Linux系统如何辨别软链接和硬链接”,在日常操作中,相信很多人在Linux系统如何辨别软链接和硬链接问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统如何辨别软链接和硬链接”的疑...
    99+
    2023-06-13
  • 如何让系统工作区连接顺风顺水
    本篇内容主要讲解“如何让系统工作区连接顺风顺水”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何让系统工作区连接顺风顺水”吧!  为了让员工安全、高效地访问内网中的资源,相信很多单位都在内网中搭...
    99+
    2023-06-14
  • 如何创建Linux系统中硬链接与软链接
    这篇文章主要介绍“如何创建Linux系统中硬链接与软链接”,在日常操作中,相信很多人在如何创建Linux系统中硬链接与软链接问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何创建Linux系统中硬链接与软链接...
    99+
    2023-06-12
  • 【Linux】理解文件系统——软硬链接
    我们之前讨论的都是进程和被打开文件的关系,而如果一个文件是没有被打开呢?没有被打开的文件操作系统如何管理? 没有被打开的文件在磁盘上,所以磁盘上有大量的文件,这些文件要被静态管理起来,方便我们随时打开,而做这部分工作的我们称为文件系统。 ...
    99+
    2023-08-18
    linux 运维 服务器
  • 如何分析Linux系统硬链接数
    本篇文章为大家展示了如何分析Linux系统硬链接数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在Linux系统中硬链接其实就是是一个指针,指向文件索引节点,那么硬链接数是什么意思呢?1、打开LIN...
    99+
    2023-06-28
  • 如何理解linux链接编译
    本篇内容主要讲解“如何理解linux链接编译”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解linux链接编译”吧!为什么要包含头文件而不是.c文件测试代码:代码如下:m.c文件:#inc...
    99+
    2023-06-09
  • 如何远程连接Linux系统服务器
    Linux服务器远程连接方法 这里给大家普及一下Linux服务器,是一台安装Ubuntu系统的工作站。这类服务器大部分用于程序员开发编程使用,说简单点就是拿来敲代码的。 通常需要借助远程连接工具来连接Linux远程服务器...
    99+
    2023-10-26
    服务器 linux ssh 运维 驰网科技 Powered by 金山文档
  • Linux系统如何创建软连接
    小编给大家分享一下Linux系统如何创建软连接,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、创建1、创建软链接 ln -s 【目...
    99+
    2023-06-28
  • Linux系统下如何检测U盘是否已连接
    这篇文章给大家分享的是有关Linux系统下如何检测U盘是否已连接的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux的文件系统是异步的,也就是说写一个文件不是立刻保存到介质(硬盘,U盘等)中,而是存到缓冲区内...
    99+
    2023-06-17
  • Linux软连接该如何理解
    Linux软连接该如何理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、软链接创建 1、创建软链接 ln -s 【目...
    99+
    2023-06-28
  • 如何在Linux系统下命令行中实现Wifi连接
    这篇文章主要讲解了“如何在Linux系统下命令行中实现Wifi连接”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在Linux系统下命令行中实现Wifi连接”吧!无论何时要安装一款新的 L...
    99+
    2023-06-13
  • 如何检测在Linux系统下U盘是否已连接
    这篇文章主要为大家展示了“如何检测在Linux系统下U盘是否已连接”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何检测在Linux系统下U盘是否已连接”这篇文章吧。Linux的文件系统是异步的...
    99+
    2023-06-17
  • Linux系统如何查看tcp连接数
    本文将为大家详细介绍“Linux系统如何查看tcp连接数”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“Linux系统如何查看tcp连接数”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一...
    99+
    2023-06-28
  • Linux系统中如何查看TCP连接数
    这篇文章主要为大家展示了“Linux系统中如何查看TCP连接数”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统中如何查看TCP连接数”这篇文章吧。一、查看哪些IP连接本机 ...
    99+
    2023-06-28
  • git clone连接超时,如何解决?(操作系统-linux)
    解决方案有以下几种: 使用代理,如果您正在使用公司或学校网络,可能需要设置代理才能访问外部网络。检查网络连接是否正常,确保您的电脑能够正常访问互联网。尝试使用 HTTPS 而不是 SSH 连接,因为某些网络可能会阻止 SSH 连接。尝试...
    99+
    2023-09-14
    git ssh github 服务器 运维
  • 如何解决Linux系统中连接超时的问题
    本篇内容主要讲解“如何解决Linux系统中连接超时的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决Linux系统中连接超时的问题”吧!  IPv6被认为是IPv4&mdash...
    99+
    2023-06-13
  • 【Linux】基础IO —— 深入理解文件系统 | 软硬链接
    🌈欢迎来到Linux专栏~~ 深入理解文件系统 ...
    99+
    2023-09-11
    linux 运维 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作