linux下so动态库一些不为人知的秘密(转)
2014-08-23 12:41
316 查看
linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。
基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看
# ldd /bin/ls
使用 ldd -u /bin/ls 查看不需要链接的so
大家知不知道linux从程序(program或对象)变成进程(process或进程),要经过哪些步骤呢,这里如果详细的说,估计要另开一篇文章。
简单的说分三步:
1、fork进程,在内核创建进程相关内核项,加载进程可执行文件;
2、查找依赖的so,一一加载映射虚拟地址
3、初始化程序变量。
可以看到,第二步中dll依赖越多,进程启动越慢,并且发布程序的时候,这些链接但没有使用的so,同样要一起跟着发布,否则进程启动时候,会失败,找不到对应的so。
所以我们不能像上面那样,把一些毫无意义的so链接进来,浪费资源。但是开发
人员写makefile 一般有没有那么细心,图省事方便,那么有什么好的办法呢。继续看下去,下面会给你解决方法。
运行程序的时候找不到依赖的so。一般人使用方法是修改LD_LIBRARY_PATH这个环境变量
export LD_LIBRARY_PATH=/tmp
这样就OK了, 不过这样export 只对当前shell有效,当另开一个shell时候,又要重新设置。
可以把export LD_LIBRARY_PATH=/tmp 语句写到 ~/.bashrc中,这样就对当前用户有效了,
写到/etc/bashrc中就对所有用户有效了。
http://blog.chinaunix.net/uid-27105712-id-3313293.html
http://blog.chinaunix.net/uid-27105712-id-3313327.html
基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看
# ldd /bin/ls
使用 ldd -u /bin/ls 查看不需要链接的so
大家知不知道linux从程序(program或对象)变成进程(process或进程),要经过哪些步骤呢,这里如果详细的说,估计要另开一篇文章。
简单的说分三步:
1、fork进程,在内核创建进程相关内核项,加载进程可执行文件;
2、查找依赖的so,一一加载映射虚拟地址
3、初始化程序变量。
可以看到,第二步中dll依赖越多,进程启动越慢,并且发布程序的时候,这些链接但没有使用的so,同样要一起跟着发布,否则进程启动时候,会失败,找不到对应的so。
所以我们不能像上面那样,把一些毫无意义的so链接进来,浪费资源。但是开发
人员写makefile 一般有没有那么细心,图省事方便,那么有什么好的办法呢。继续看下去,下面会给你解决方法。
运行程序的时候找不到依赖的so。一般人使用方法是修改LD_LIBRARY_PATH这个环境变量
export LD_LIBRARY_PATH=/tmp
这样就OK了, 不过这样export 只对当前shell有效,当另开一个shell时候,又要重新设置。
可以把export LD_LIBRARY_PATH=/tmp 语句写到 ~/.bashrc中,这样就对当前用户有效了,
写到/etc/bashrc中就对所有用户有效了。
http://blog.chinaunix.net/uid-27105712-id-3313293.html
http://blog.chinaunix.net/uid-27105712-id-3313327.html
相关文章推荐
- linux下so动态库一些不为人知的秘密(上)
- linux下so动态库一些不为人知的秘密(上)
- linux下so动态库一些不为人知的秘密(中)
- linux下so动态库一些不为人知的秘密
- Android 一些不为人知的小秘密
- JNI 编写动态链接库 HelloNative 详细过程(也即用Java和C在Linux下动态生成并使用so文件过程)
- windows中dll和linux中so的动态链接库的详解
- so-a--linux---静态--动态--链接库
- Tips: 使用autotools生成动态.so库文件 / Generate .so library files using autotools in Solaris and Linux
- 动态机制那些不为人知的秘密
- linux下动态链接问题(so文件的编写与调用)
- linux 使用readelf命令查看.so动态库的真实名
- Linux下的动态共享库(so)开发调用
- (备忘)在Linux下动态调用so中的函数
- Linux下的动态链接库.so文件的使用
- linux下动态库so文件的一些认识 和 gcc编译的几个阶段
- linux 下创建并动态加载.so 文件
- 关于linux动态链接库的一些注意事项
- Linux下C程序调用.so(动态链)的一个例子
- Linux下的动态链接库.so文件的使用