您的位置:首页 > 其它

gcc编译工具生成动态库和静态库之三----问题及重要知识点分析

2016-08-17 15:09 288 查看
gcc编译工具生成动态库和静态库之三----问题及重要知识点分析

一、静态库生成方式



图1  源文件生成静态库
    从图一可以看出,直接由源文件生成静态库,用工具ar生成工程中不会报错,但是用工具readelf读取该静态库,会发现该静态库不是 ELF文件;说明该中方式生成的静态库不能正常使用。



图2 对象生成静态库

    从图2中可以看出,需要将源文件编译成可重定向文件后,方可利用ar工具将该文件生成静态库,并且生成的静态库可以用readelf工具读出相应信息。



图3 可重定向文件
    根据图3可知,gcc -c xxx.c -o xxx.o 编译之后生成的文件为可重定向文件。

二、动态链接库和静态链接库同名



图4 静态库和动态库同名

    根据图4可知,ldd工具可以判断库是静态库还是动态库,并且可以知道动态库中内部链接的动态库是否可以被链接器找到。



图5 运行可执行文件报错

    ldd工具查看可执行文件就可以看出无法找到libsum.so动态链接库,所以运行该文件就报错:无法打开共享对象文件。



图6 修改LD_LIBRARY_PATH环境变量

    通过将动态链接库路径导出到环境变量LD_LIBRARY_PATH中,动态库无法找到文件得到解决。

三、动态链接库同名



图7 动态链接库同名
    从图7中可以看出,动态链接库不能同名,当一个执行文件需要同时使用到这两个同名库中的接口时,会出现异常。

四、执行文件大小



图8 执行文件大小

    从图8可以看出,链接静态库明显比链接动态库体格变大,这也是动态库和静态库的区别,一般建议使用动态库,这样可以减少占用硬盘大小。
    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: