linux gcc本地链接lib文件(c静态,动态),GCC中静态连接和动态连接的区别(LINUX下)...

最近正在学习库的用法,写了最基础的libmystring.a的库(里面只有一个add函数),然后编写test程序测试add函数,用ar命令创建好libmystring.a库后,用以下命令编译静态连接的a.out

gcc –static test.c –L ./ –lmystring –o a.out

得到静态连接的a.out,./a.out后得到想要的结果;

然后 rm a.out

gcc test.c –L ./ –lmystring –o a.out

得到动态连接的a.out,./a.out后得到想要的结果;

最后把libmystring.a删掉,再./a.out  想象中是不是应该报“找不到XX库的错误”什么之类的,但结果却还是正确的运行输出相应的结果。。。。这是为什么呢? 不是说动态连接的文件在运行的时候需要依赖库文件吗?  是我哪里理解错了呢?

高手指教下!

如下是测试例子:(已经删除了.a库文件,运行a.out后还是输出正确的结果)

gfs@ubuntu:~/study/lib$ ls

a.out  mystring.c  mystring.h  mystring.o  test.c

gfs@ubuntu:~/study/lib$ file a.out

a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

gfs@ubuntu:~/study/lib$ ./a.out

add=9

|

因为你给他的本来就是一个静态库。

静态库有静态库的用法,静态库是直接打包编译的。

你可以去看看如何使用动态库。

这里,他发现你给他的是一个静态库,他会把他打包编译到可执行文件中,

以后的运行都不依赖你给他的库文件了

|

LZ,你需要去看看库文件的原理,以及运作方式。

其实你加不加

-static,结果都是一样的。按照库文件的工作原理,他会先去搜索动态库文件,也即是.so结尾的库文件,

当他找不到动态的(.so文件)的时候,他就会去找静态的库文件,也就是.a结尾的文件。

你这个地方,没什么问题

其实就是库文件找不到动态库了,他就去找静态库,一旦找到,他就工作了

|

ar生成的libmysring.a是静态库.

gcc -shared -o libmstring.so mystring.o

生成的才是动态库。

gcc test.c –L ./ –lmystring –o a.out

会优先链接动态库,如果没有就用静态库。

|

21be09c3db2dedc4fe82c61497eeec42.gif

你给他一个静态库,他就会用静态方式去连接,编译打包。

他不会把你的静态库转换成动态库的。

这个是原则。

|

89213f39922dc3e1c9076ab6aa3623ca.gif

LZ,这样给你说:你给他吃什么,他就吃什么。

动态连接来说,他是通吃的。只要你不是在程序中用代码使用动态库。

像你调用函数这种,不加static,他都可以吃的。

但是惟独动态的.so的时候,-static他吃不了。因为你的static已经限定了,你只能给我吃静态的 ,动态的他就不能吃。

如此。。以用-static的时候,给他喂一个.so的,他当然要拒绝了

|

很多库同时带静态(.a)和动态(.so)文件,而且放在同一个目录下,这个时候就需要-static指定用静态库,否则永远会优先使用动态库。

|

77d8537d1f52df0754b1fe7a2c8c2832.gif

-static...

就是让你静态打包编译啊,很多情况下,你会发现,一个库文件,他既有动态库,也有静态库。

为了不依赖平台,我-static,当然就不会去使用.so了,不管你有没有动态库,方正我就只需要你的静态库就ok

你可以在/lib下看看,很多库,都是动态静态都有的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言 样例测试覆盖,白盒测试实例之十一——逻辑覆盖测试

逻辑覆盖测试是通过对程序逻辑结构的遍历实现程序的覆盖。从覆盖源代码的不同程度可以分为以下六个标准:语句覆盖、判定覆盖(又称为分支覆盖)、条件覆盖、判定-条件覆盖(又称为分支-条件覆盖)、条件组合覆盖和路径覆盖。先看一下具体例子的源代码(C语言)&#xff1a…

ev3的c语言编程软件,乐高EV3编程软件教育版下载

乐高EV3编程软件教育版官方版是一款用于机器人编程的应用工具,乐高EV3编程软件教育版最新版可以通过可视化图标形式编程,用以控制机器人的各种动作指令,乐高EV3编程软件教育版操作起来比较简单,发挥你的想象,创造无限的…

android 4.0系统,全新Android 4.0系统_手机Android频道-中关村在线

与搭载Android 2.3系统的OPPO R807不同,OPPO R817搭载了Android 4.0系统。不过这款手机仍旧舍弃了Android系统的原生界面,因此两款手机在界面上的变化其实并不非常大。升级Android 4.0后界面变化不大内置多款主题与解锁样式可更改字体及SIM卡信息OPPO R8…

android清除图案锁 位置,安卓手机清除锁屏密码、锁屏图案的教程

来源:安卓网2014-01-21/12:15本文分享一个安卓手机清除锁屏密码以及锁屏图案的几种方法和详细教程。如果锁屏密码、或者图形锁屏密码忘记了怎么办,怎么清除呢?下面小编整理了3种安卓手机清除锁屏图案密码的方法。↓↓↓准备工作:1.确保已经安…

html5程序自动登录,Jtro的技术分享:网页调起unity的exe程序并自动登录

思路是这样:通过一个额外的exe文件来实现登录,并保存一个token文件,然后在unity的项目提交数据的时候读取这个token向服务器发送数据。下面是具体的方法:s这个需要用到WPF来编写,首先打开VS2017,选择创建WP…

html 图片防盗链,【反防盗链】介绍一个对付图片防盗链的方法

悲催的声明:由于腾讯也采用了防盗链技术,本文方法已经失效了!当我们想在文章里引用某张图片时,如果对方设置了防盗链,我们看到的将是404或forbidden或其他图片,而不是想要的那张图片,为此&#…

html字体阴影怎么设置6,css怎么设置字体阴影

css设置字体阴影的方法:使用代码【text-shadow:3px 3px 3px #00f;】,【text-shadow】属性应用于阴影文本,语法为【text-shadow: h-shadow v-shadow blur color;】。本教程操作环境:windows10系统、css3版,该方法适用于…

PCL入门

pcl的入门 本博客主要是对外文的翻译,及其他资料的一些整理。 pcl 分割成好几个模块的库 Filters(滤波器) Features(特征) Keypoints(关键点) Registration(注册) KdTree:k-dimension tree(k维的树) OcTree(八叉树) Segmetation(分割) Sample Consensus(采…

pcl里面的3D特征

我这里不介绍pcl里面的类的命名规范,及点的类型。为什么呢?pcl里面类的命名规范,比较繁琐,而且主要是针对要对pcl这个库要开源的人士,而pcl里面的点的类型太多,足够满足你的要求。所以我们要走一条具有中国特色的pcl主…

html本地缓存未查看信息,不同用户看到了相同的信息-一次web系统缓存问题的解决...

最近负责的系统总是出现奇怪的缓存问题,在这里简单记录一下碰到的问题和踩到的坑。问题:用户反映使用不同账号A,B登录时,都出现账号A的页面信息(未邮寄账单提示)。如下所示:图1:未邮寄账单提示一 session缓…

pcl里面的法线估计

法线估计是一个很重要的特征,常常在被使用在很多计算机视觉的应用里面,比如可以用来推出光源的位置,通过阴影与其他视觉影响。 给一个几何表面,去推断给定点的法线方向,即垂直向量的方向往往是不容易的。然而&#xf…

pcl通过积分图来进行法线预测

首先,我们来看一下什么是积分图,我查了一下wiki,发现它的定义是这样的。 A summed area table is a data structure and algorithm for quickly and efficiently generating the sum of values in a rectangular subset of a grid. In the i…

个人计算机的防毒软件无法防御,在win10系统中无法启动defender防御软件的解决方法...

软件大小: 3.56 MB软件版本: 3.3.30.180软件类型:系统补丁查看详情直接下载win10系统是我们现在都在使用的系统,下面小编为大家在win10系统中无法启动defender防御软件的解决方法,希望可以帮助到你们。解决方法:1、根据…

pcl里面的点特征直方图(PFH)

表面法线和曲率可以好的代表一个点的几何特征。然而它们算得很快,而且算法简单,但是它们不能捕获细节,它们只是点的近邻的几何特征的近似估计。作为一个直接的结论,大多数的场景往往会包括很多有着相似特征的点,这会减…

为什么计算机休眠风扇还转,Win7系统进入睡眠模式后电脑风扇还在转的解决方法...

如果长时间离开电脑,可以让win7系统进“睡眠”模式,这样可以节省能源,延长硬盘寿命。但是有位用户说自己Win7系统进入睡眠模式后,依旧可以听到风扇还在转,怎么回事呢?其实这是因为Win7处在低耗能的状态&…

快速特征点直方图描述器(FPFH)

PFH的理论上的时间复杂度是O(nk的平方),n是点的数量,k是最近邻的个数。对于实时系统来说,这压根就是不行的,所以作为PFH规划的简化版本,FPFH把计算复杂度减少成O(nk),但是还具有很好的和PFH差不多的区分能力。 第一步…

计算机硬盘能达到5g的速度,5G号称可以达到几GB每秒,但是目前的手机处理器和硬盘可以处理这么庞大的数据量吗?...

感谢悟空的邀请!“通信行业那些事儿”,专业解读通信、网络类问题,希望我的回答能够给您启发,大家共同探讨、共同提高!欢迎关注我!楼主您好!这个问题,我正好是通信行业的从业人员&…

点集的视点特征直方图的评估

VFH(Viewpoint Feature Histgram)视角特征直方图描述器,可以很直观的表现点的聚类在处理聚类识别与6DOF位姿估计。 下面的图像展示了一个VFH识别和位姿估计的例子。给一些训练集,除了左下角的那个杯子,用来学习,用左下角的杯子作…

惯性矩和偏心距描述器

这次我们将学会怎么使用pcl::MomentOfInertiaEstimation 这个类来获取以惯性矩和偏心距为基础的描述器。这个类也能提取坐标对称和定向包围的方形盒子。但是记住导出的OBB不是最小可能性的盒子。 下面介绍了该种方法的特征提取方式。第一次先算出点云矩阵的协方差,…

mac os修改计算机名,如何修改Mac系统的个人用户名?

在Mac OS X中一旦建立一个用户,此用户的主目录的目录名将会是它的“短”名。更改登录名和主目录名从来都不简单,以前唯一的方法就是建立一个新用户,然后把所有的文件拷贝过去。Mac 修改用户是一件很悲剧的事,因为牵涉到很多地方的…