linux下使用静态库需要注意的几个问题
来源:互联网 发布:编写c语言程序步骤 编辑:程序博客网 时间:2024/06/05 18:35
写了一个程序,程序分三层架构,将中层和底层都分别独立出来,包装成为静态库,最后在连接程序的时候连接这几个静态库即可;想法就是这样的简单,可是没想到在使用时,却碰到了一些小麻烦,这些小麻烦,看似不起眼,却阻止你进一步进行开发工作的进程;遇到了什么麻烦呢?下面一一列出来进行说明:
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在进行参数处理或者准确的说是符号表链接处理时,对应的参数顺序就是从右到左的查找顺序,所以,在进行静态链接库时一定要注意这一点;
小小总结,至此为止;
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在进行参数处理或者准确的说是符号表链接处理时,对应的参数顺序就是从右到左的查找顺序,所以,在进行静态链接库时一定要注意这一点;
小小总结,至此为止;
- linux下使用静态库需要注意的几个问题
- linux下使用静态库需要注意的几个问题
- 使用TinyXml库需要注意的几个问题
- 关于使用标签需要注意的几个问题
- 使用GDI+时需要注意的几个问题
- 使用LIBSVM需要注意的几个问题
- 使用qtp需要注意的几个问题
- 使用btrace需要注意的几个问题
- 使用三极管时需要注意的几个问题
- SQLitePersistentObject使用需要注意的几个问题
- 使用btrace需要注意的几个问题
- 使用LIBSVM需要注意的几个问题
- C++中的静态对象需要注意的几个问题
- Linux下MySql5.1注意的几个问题
- ArcEngine_WPF 需要注意的几个问题
- Ajax需要注意的几个问题
- 新手选择Linux VPS过程中需要注意的几个问题
- 使用模板缓冲区时需要注意的几个问题
- hdu 2485 Destroying the bus stations (dfs+bfs)
- phpunit -assert系列函数
- oracle11g R2 RAC 卸载 grid
- iOS基础之深复制与浅复制
- 代码大全2_6——可以工作的类
- linux下使用静态库需要注意的几个问题
- 黑马程序员--面向对象之七:Collection集合框架
- C++中const型数据的小结
- 推荐python主要模块学习
- phpunit使用(项目中)
- XP搜索功能不能使用解决办法
- apache编译常见问题
- 我们来谈谈Unity3D 优化
- Linux 从源码编译安装 OpenSSL