linux下使用静态库需要注意的几个问题
来源:互联网 发布:dw软件下载 编辑:程序博客网 时间:2024/06/08 16:30
写了一个程序,程序分三层架构,将中层和底层都分别独立出来,包装成为静态库,最后在连接程序的时候连接这几个静态库即可;想法就是这样的简单,可是没想到在使用时,却碰到了一些小麻烦,这些小麻烦,看似不起眼,却阻止你进一步进行开发工作的进程;遇到了什么麻烦呢?下面一一列出来进行说明:
1、先提一下一个很重要的一点,那就是你连接无论是连接静态库也好,还是共享动态库也好,都要在最后链接成为程序时将所有的这些链接库放在那条连接命令的后面,类似下面这样子:
gcc -o main main.c -L. -lhello -L/usr/local/lib -lavformat
或者:
gcc -o main main.c libhello.a -L/usr/local/lib -lavformat
因为静态链接库本身就是要将所需代码链接到程序最后的二进制文件中去,所以这种链接方法也是可取的;
但是,下面紧接这又是另外一个致命的问题;
2、在进行静态库的链接时,你的静态链接库的顺序和链接时搜索符号表的顺序有关系,规则就是你要把最低层的静态链接库放在最后面,依次类推;否则就会出现
undefined reference to `
的错误,让你丈二和尚摸不找头脑,不知所以,明明已经定义了嘛,呵呵,这就是其中的原故;由此也大致可以估计出gcc在进行参数处理或者准确的说是符号表链接处理时,对应的参数顺序就是从右到左的查找顺序,所以,在进行静态链接库时一定要注意这一点;
小小总结,至此为止;
reference:
http://blog.csdn.net/baojiangeng/archive/2005/09/03/470616.aspx
http://blog.csdn.net/thinkerABC/archive/2006/03/11/621817.aspx
1、先提一下一个很重要的一点,那就是你连接无论是连接静态库也好,还是共享动态库也好,都要在最后链接成为程序时将所有的这些链接库放在那条连接命令的后面,类似下面这样子:
gcc -o main main.c -L. -lhello -L/usr/local/lib -lavformat
或者:
gcc -o main main.c libhello.a -L/usr/local/lib -lavformat
因为静态链接库本身就是要将所需代码链接到程序最后的二进制文件中去,所以这种链接方法也是可取的;
但是,下面紧接这又是另外一个致命的问题;
2、在进行静态库的链接时,你的静态链接库的顺序和链接时搜索符号表的顺序有关系,规则就是你要把最低层的静态链接库放在最后面,依次类推;否则就会出现
undefined reference to `
的错误,让你丈二和尚摸不找头脑,不知所以,明明已经定义了嘛,呵呵,这就是其中的原故;由此也大致可以估计出gcc在进行参数处理或者准确的说是符号表链接处理时,对应的参数顺序就是从右到左的查找顺序,所以,在进行静态链接库时一定要注意这一点;
小小总结,至此为止;
reference:
http://blog.csdn.net/baojiangeng/archive/2005/09/03/470616.aspx
http://blog.csdn.net/thinkerABC/archive/2006/03/11/621817.aspx
- linux下使用静态库需要注意的几个问题
- linux下使用静态库需要注意的几个问题
- 使用TinyXml库需要注意的几个问题
- 关于使用标签需要注意的几个问题
- 使用GDI+时需要注意的几个问题
- 使用LIBSVM需要注意的几个问题
- 使用qtp需要注意的几个问题
- 使用btrace需要注意的几个问题
- 使用三极管时需要注意的几个问题
- SQLitePersistentObject使用需要注意的几个问题
- 使用btrace需要注意的几个问题
- 使用LIBSVM需要注意的几个问题
- C++中的静态对象需要注意的几个问题
- Linux下MySql5.1注意的几个问题
- ArcEngine_WPF 需要注意的几个问题
- Ajax需要注意的几个问题
- 新手选择Linux VPS过程中需要注意的几个问题
- 使用模板缓冲区时需要注意的几个问题
- tomcat5.0.28与sqlserver2000配置连接池
- 软件配置管理
- 下定决心,学好日语!
- 把字符串中不规则的空格取掉或换成"/"
- sqlserver 数据类型
- linux下使用静态库需要注意的几个问题
- 一个十分有趣的笑话:
- SQL server中设置自增字段
- rand ( ) 和 srand ( )【C语言库函数源代码】
- iscsymf ( )【C语言库函数源代码】
- Applied Cryptography girl
- iscsym ( )【C语言库函数源代码】
- JAVA起航
- srandom ( ) 和 random ( ) 【C语言库函数源代码】