当前位置: 技术问答>linux和unix
一个奇怪的Linux库问题
来源: 互联网 发布时间:2016-01-17
本文导语: 我写了一个名为test.c程序: main() { cos(12.1); } 当我用下面命令: gcc -o test test.c /usr/lib/libm.a 编译生成可执行程序test后,我用ls -l 查看生成的可执行程序test,其大小为11361 当我用下面命令: gcc -o test test.c /usr/lib/libm.so ...
我写了一个名为test.c程序:
main()
{
cos(12.1);
}
当我用下面命令:
gcc -o test test.c /usr/lib/libm.a
编译生成可执行程序test后,我用ls -l 查看生成的可执行程序test,其大小为11361
当我用下面命令:
gcc -o test test.c /usr/lib/libm.so
编译生成可执行程序test后,我用ls -l 查看生成的可执行程序test,其大小为11438
为什么用动态库生成的可执行程序还要大些, 库文件libm.a与libm.so的区别是什么.
而且我用ldd查看两次生成的可执行文件,其结果也不一样.请问这又是为什么呢?
main()
{
cos(12.1);
}
当我用下面命令:
gcc -o test test.c /usr/lib/libm.a
编译生成可执行程序test后,我用ls -l 查看生成的可执行程序test,其大小为11361
当我用下面命令:
gcc -o test test.c /usr/lib/libm.so
编译生成可执行程序test后,我用ls -l 查看生成的可执行程序test,其大小为11438
为什么用动态库生成的可执行程序还要大些, 库文件libm.a与libm.so的区别是什么.
而且我用ldd查看两次生成的可执行文件,其结果也不一样.请问这又是为什么呢?
|
你这么小的程序比较没有什么意义的,
连接动态库时要加入一些信息以供运行时解析链接用的
所以加入的信息比直接包进的例程大是有可能的,大一点的程序就不会出现了这种情况了
你可以试试
连接动态库时要加入一些信息以供运行时解析链接用的
所以加入的信息比直接包进的例程大是有可能的,大一点的程序就不会出现了这种情况了
你可以试试
|
动态库和静态库本身就存在区别,动态库是运行时load
|
cos的代码可能比使用动态加载要的代码还小,就会这样了。