GCC/LD编译链接潜规则 (第四弹) : ld 会把所有通过-l指定的动态库全部链接进最终的目标程序中, 无论是否真的用到(导致生产环境加载失败)
来源:互联网 发布:淘宝小白是什么意思啊 编辑:程序博客网 时间:2024/06/09 22:58
GCC/LD编译链接潜规则 (第四弹) : ld 会把所有通过-l指定的动态库全部链接进最终的目标程序中, 无论是否真的用到(导致生产环境加载失败)
- nemozhang
- 2012-06-25 16:28
961ci+6E0x90ErtT+mK9dwOv7CFr4pCKDoaRbj8j3Ib/KOBXIHo
潜规则: ld 会把所有通过-l指定的动态库全部链接进最终的目标程序中, 无论是否真的用到.这会导致额外链接进去一些无用的库.
经常发现这样的情况, 在开发环境编译好的so或exe, 放到环境之后, 会提示加载失败, 原因是缺少某些依赖的so. 最常见的是找不到mysql.so. 因为开发环境有mysql.so, 而生产环境木有.
解决办法: 不要通过-l链接无用的so.
下面是当前目录的文件, 以及各个文件的内容.
下面是测试过程, 结果是, 虽然ld_so.cpp没有用到liba.so的任何东西, 却还是把liba.so的信息链进来了, 导致运行时加载so失败.
把当前目录设为动态库的搜索路径之后, OK了.
不指定a.so时, 照样能链接成功.
961ci+6E0x90ErtT+mK9dwOv7CFr4pCKDoaRbj8j3Ib/KOBXIHo
- GCC/LD编译链接潜规则 (第四弹) : ld 会把所有通过-l指定的动态库全部链接进最终的目标程序中, 无论是否真的用到(导致生产环境加载失败)
- GCC/LD编译链接潜规则 (第二弹) : 为什么总链接失败? --LD对依赖库的输入顺序敏感
- GCC/LD编译链接潜规则
- GCC/LD编译链接潜规则 (第三弹) : 当项目库中包含多个同名的头文件时.
- GCC/LD编译链接潜规则 (第五弹) : 为什么会有undified symbol?
- GCC/LD编译链接潜规则 (第五弹) : 为什么会有undified symbol?
- GCC/LD编译链接潜规则 (第一弹) : 当一个符号被多重定义时
- 揪出gcc默认使用的ld链接脚本
- 揪出gcc默认使用的ld链接脚本
- gcc -l参数和-L参数 指定程序要链接的库
- ld链接器的链接顺序
- ld链接器的链接选项(持续)
- ld 动态链接库配置
- ios程序编译链接参数 all_load 的 ld duplicate symbol 的bug及修复
- ios程序编译链接参数 all_load 的 ld duplicate symbol _main 的 bug及修复
- GNU GCC使用ld链接器进行链接的完整过程是怎样的
- 如何解决动态链接导致的程序启动失败
- GCC 链接顺序导致使用MongoDB的应用链接失败
- GCC/LD编译链接潜规则 (第三弹) : 当项目库中包含多个同名的头文件时.
- 关于android Listview 使用时遇到的几个问题
- android(17)_数据存储与访问_SQLite数据库_修改数据库
- 基于邻接矩阵存储的图的最短路径问题(Dijkstra算法)
- Java集合介绍2
- GCC/LD编译链接潜规则 (第四弹) : ld 会把所有通过-l指定的动态库全部链接进最终的目标程序中, 无论是否真的用到(导致生产环境加载失败)
- android OTA 的功能实现和修改
- Android网络编程之Socket&Http
- CentOS 6.3下Samba服务器的安装与配置
- c# 控制IE浏览器
- Overriding toString(), hashCode() and equals() Methods
- java中String的常用方法
- 手机交互设计原则
- Linux 之 shell 比较运算符