写了一个程序,程序分三层架构,将中层和底层都分别独立出来,包装成为静态库,最后在连接程序的时候连接这几个静态库即可;想法就是这样的简单,可是没想到在使用时,却碰到了一些小麻烦,这些小麻烦,看似不起眼,却阻止你进一步进行开发工作的进程;遇到了什么麻烦呢?下面一一列出来进行说明:
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在进行参数处理或者准确的说是符号表链接处理时,对应的参数顺序就是从右到左的查找顺序,所以,在进行静态链接库时一定要注意这一点;
小小总结,至此为止;
阅读(1053) | 评论(0) | 转发(0) |