DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2016年7月25日

摘要: Linux动态链接库的创建与使用1. 介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。 程序函数 阅读全文
posted @ 2016-07-25 20:15 DoubleLi 阅读(846) 评论(0) 推荐(0)

摘要: 程序往往会因为收到一些信号导致退出,但很多时候并不是我们想要的,比如往一个已经关闭的socket连接发送数据就会受到SIGPIPE,此信号默认会退出程序,但其实大部分时候我们并不想这么做,所以需要忽略一些信号。常见的有 SIGPIPE SIGTTOU SIGTTIN SIGTSTP 阅读全文
posted @ 2016-07-25 20:13 DoubleLi 阅读(456) 评论(0) 推荐(0)

摘要: 继续上一篇《 linux下so动态库一些不为人知的秘密(中) 》介绍so搜索路径,还有一个类似于-path,叫LD_RUN_PATH环境变量, 它也是把路径编译进可执行文件内,不同的是它只设置RPATH。 [stevenrao] $ g++ -o demo -L /tmp/ -ltmp main.c 阅读全文
posted @ 2016-07-25 20:07 DoubleLi 阅读(1361) 评论(0) 推荐(0)

摘要: 上一篇(linux下so动态库一些不为人知的秘密(上))介绍了linux下so一些依赖问题,本篇将介绍linux的so路径搜索问题。 我们知道linux链接so有两种途径:显示和隐式。所谓显示就是程序主动调用dlopen打开相关so;这里需要补充的是,如果使用显示链接,上篇文章讨论的那些问题都不存在 阅读全文
posted @ 2016-07-25 20:03 DoubleLi 阅读(2032) 评论(0) 推荐(0)

摘要: linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/ls linux-vdso.so.1 => (0x000 阅读全文
posted @ 2016-07-25 19:55 DoubleLi 阅读(9377) 评论(0) 推荐(0)

摘要: 根据说明文档“How To Write Shared Libraries"介绍, 有四种方法: 1. 在方法声明定义时,加修饰:__attribute__((visibility("hidden"))) 就是说将不公开的函数都加上这个属性,没加的就是可见的 2. gcc 在链接时设置 -fvisib 阅读全文
posted @ 2016-07-25 16:05 DoubleLi 阅读(7486) 评论(0) 推荐(1)

摘要: 说道“动态库版本兼容”,很多人头脑中首先蹦出的就是“Dll Hell”。啊,这曾经让人头疼的难题。时至今日,这个难题已经很好地解决了。 在进一步讨论之前来思考一个问题:Linux下为什么没有让人头痛的“DllHell”?回答这个问题,非常easy,因为——Linux下根本没有dll! 哈哈,当然这只 阅读全文
posted @ 2016-07-25 16:04 DoubleLi 阅读(2564) 评论(0) 推荐(0)

摘要: 我们很多c程序在windows下是以dll形式展现的,在linux则是以so 形式展现的。 windows一般不会因为编译dll文件的编译器版本不同而出先dll文件不能执行。 但是linux下,不同版本内核的linux下编译的c程序,在其他版本的linux下就容易出现无法执行的问题。主要可能是支持程 阅读全文
posted @ 2016-07-25 11:12 DoubleLi 阅读(12067) 评论(0) 推荐(0)

摘要: objdump -tT libName.so | grep symbel symbolName nm -D libName.so | grep symbel symbolName 很多非常熟悉windows 进程依赖那个dll,使用depends,linux使用ldd命令。查看函数windows使用 阅读全文
posted @ 2016-07-25 11:10 DoubleLi 阅读(7401) 评论(0) 推荐(0)

摘要: linux下查看动态链接库依赖关系的命令 x86:ldd *.so arm:arm-linux-readelf -d *.so 实际例子:以项目中用到的库librtsp.so分析:lijun@ubuntu:~/workspace$ arm-hisiv100nptl-linux-ld -d librt 阅读全文
posted @ 2016-07-25 10:49 DoubleLi 阅读(1808) 评论(0) 推荐(0)

摘要: 今天在帮同事查看一个问题时, 需要用到ldd, 于是就顺便看了一下ldd的实现. 好在ldd本身只是一个脚本, 而不是executable, 可以直接查看实现的代码.根据注释: 21 # This is the `ldd' command, which lists what shared libra 阅读全文
posted @ 2016-07-25 10:05 DoubleLi 阅读(3399) 评论(0) 推荐(0)