LINUX 中库/可执行文件的大小很大
我们有一个使用 C++ 创建的 32 位 Gui 应用程序。我们将该应用程序从 Solaris 移植到 Linux。我们面临的问题是,
与 Solaris 相比,LINUX 中的库和可执行文件的大小非常大。
我们使用的Linux版本是Red Hat Enterprise Linux 5.4。
请查找创建的示例动态库。我们想知道 LINUX 的以下行为是否正常。
考虑我们创建了两个文件 test1.cc 和 test2.cc。两者都有一行代码。
a-2720@N530 /data1/users/a-2720/samp :ls -lrt test1.cc test2.cc
-rw-rw-r-- 1 a-2720 mcs 21 May 18 06:16 test1.cc
-rw-rw-r-- 1 a-2720 mcs 21 May 18 06:16 test2.cc
a-2720@N530 /data1/users/a-2720/samp :cat test1.cc
#include<iostream.h>
a-2720@N530 /data1/users/a-2720/samp :cat test2.cc
#include<iostream.h>
因此,这些文件内部只有一行,
我使用这些文件创建了一个共享库。
SOLARIS
CC -c -library=iostream -g -mt test1.cc
CC -c -library=iostream -g -mt test2.cc
CC -G -h libtestsolaris.so test1.o test2.o -o libtestsolaris.so -library=iostream
a-2720@N530 /data1/users/a-2720/samp :ls -lrt test1.o test2.o libtestsolaris.so
-rw-rw-r-- 1 a-2720 mcs 20944 May 18 06:16 test1.o
-rw-rw-r-- 1 a-2720 mcs 20944 May 18 06:16 test2.o
-rwxrwxr-x 1 a-2720 mcs 7384 May 18 06:16 libtestsolaris.so
LINUX
CC -m32 -c -library=iostream -g -mt test1.cc
CC -m32 -c -library=iostream -g -mt test2.cc
CC -m32 -G -h libtestlinux.so test1.o test2.o -o libtestlinux.so -library=iostream
/data1/users/adarsh/samp :ls -lrt test1.o test2.o libtestlinux.so
-rw-r--r-- 1 adarsh ifo 20220 May 18 06:44 test1.o
-rw-r--r-- 1 adarsh ifo 20220 May 18 06:44 test2.o
-rwxr-xr-x 1 adarsh ifo 41680 May 18 06:44 libtestlinux.so
在这里我们可以看到Linux 共享库的大小比solaris 曾经大得多。 源文件
请注意,这些库的 是相同的。 我们的应用程序使用数千个具有这些头文件的文件,因此大小存在显着差异。
我们想知道这种大小差异是 LINUX 的正常行为。
系统详情
/data1/users/adarsh/samp :cat /etc/*-release
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
/data1/users/adarsh/samp :uname -a
Linux N280 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
We have a 32bit Gui application created using C++. We ported the application from Solaris to Linux. Issue we are facing is
the size of the library and executable is very large in LINUX compared to Solaris.
Red Hat Enterprise Linux 5.4 is the Linux version we using.
Please find a sample dynamic library created. We would like to know the following behavior of LINUX is normal or not.
Consider we created two files test1.cc and test2.cc. Both having a single line of code.
a-2720@N530 /data1/users/a-2720/samp :ls -lrt test1.cc test2.cc
-rw-rw-r-- 1 a-2720 mcs 21 May 18 06:16 test1.cc
-rw-rw-r-- 1 a-2720 mcs 21 May 18 06:16 test2.cc
a-2720@N530 /data1/users/a-2720/samp :cat test1.cc
#include<iostream.h>
a-2720@N530 /data1/users/a-2720/samp :cat test2.cc
#include<iostream.h>
Thus the files have only only one line inside them
I created a Shared library using these files.
SOLARIS
CC -c -library=iostream -g -mt test1.cc
CC -c -library=iostream -g -mt test2.cc
CC -G -h libtestsolaris.so test1.o test2.o -o libtestsolaris.so -library=iostream
a-2720@N530 /data1/users/a-2720/samp :ls -lrt test1.o test2.o libtestsolaris.so
-rw-rw-r-- 1 a-2720 mcs 20944 May 18 06:16 test1.o
-rw-rw-r-- 1 a-2720 mcs 20944 May 18 06:16 test2.o
-rwxrwxr-x 1 a-2720 mcs 7384 May 18 06:16 libtestsolaris.so
LINUX
CC -m32 -c -library=iostream -g -mt test1.cc
CC -m32 -c -library=iostream -g -mt test2.cc
CC -m32 -G -h libtestlinux.so test1.o test2.o -o libtestlinux.so -library=iostream
/data1/users/adarsh/samp :ls -lrt test1.o test2.o libtestlinux.so
-rw-r--r-- 1 adarsh ifo 20220 May 18 06:44 test1.o
-rw-r--r-- 1 adarsh ifo 20220 May 18 06:44 test2.o
-rwxr-xr-x 1 adarsh ifo 41680 May 18 06:44 libtestlinux.so
Here we can see that the Linux shared library are in much bigger size than solaris once. Please note that the source file
for these libraries are same.
Our application uses thousand of files having these header files and hence a notable difference in size occurs.
We would like to know this size difference is a normal behavior of LINUX.
System Details
/data1/users/adarsh/samp :cat /etc/*-release
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
/data1/users/adarsh/samp :uname -a
Linux N280 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
-g
选项将添加调试信息< /a> 到可执行文件,这会增加其大小。同时打开控制各种优化的选项。-g
option will add debugging information to the executable, which will increase its size. Also turn on the options that control various optimizations.你可以使用 nm 来查看库中有哪些代码。
you could play with nm to see what code is in the library.
执行步骤 1 和 2 后,进行比较。
After doing steps 1 and 2, do the comparison.