- 论坛徽章:
- 0
|
回复二楼: 已用ldd看过,链接没有问题..
进一步观察,发现更加奇怪了..
编译库后生成静态库 liba1.a , liba2.a , liba3.a
相应生成动态库 liba2.so, liba2.so, liba3.so
然后,我的主程序 main.c 在编译时要去链接库..
1. 如果main.c采取静态编译的方式,编译时链接静态库 liba1.a , liba2.a , liba3.a,
则最后生成可执行文件 main 为30多M(静态编译将所有的都弄进来了)...此时可以正确执行程序的所有功能.
2. 如果main.c采取动态编译的方式编译时链接动态库 liba2.so, liba2.so, liba3.so
最后生成的可执行文件为几百k, 然后将这三个库liba2.so, liba2.so, liba3.so用ldconfig设置一下,使得程序运行时能正确加载它们.
但此时生成的可执行文件main却有某些功能运行时出现"段错误", 而另外一些功能又能正确运行.
这难道说明动态库里有一些"符号"不存在,动态加载时不能找到它???
ps:上面说明两个可执行程序大小的差异,是为了请教:
1. 可否在静态编译时将不会用到的函数去掉,不链接进来,减小可执行程序的大小?
2. 这样生成的静态库与动态库,难道其中有些函数是静态库有,而动态库不存在的?(一直觉得相同的 .o文件生成的静动态库里的"符号"应该相同,此时怀疑了.)
请达人指点一下错误? (或还需要我提供哪些信息?) |
|