- 論壇徽章:
- 0
|
回復二樓: 已用ldd看過,鏈接沒有問題..
進一步觀察,發(fā)現(xiàn)更加奇怪了..
編譯庫后生成靜態(tài)庫 liba1.a , liba2.a , liba3.a
相應生成動態(tài)庫 liba2.so, liba2.so, liba3.so
然后,我的主程序 main.c 在編譯時要去鏈接庫..
1. 如果main.c采取靜態(tài)編譯的方式,編譯時鏈接靜態(tài)庫 liba1.a , liba2.a , liba3.a,
則最后生成可執(zhí)行文件 main 為30多M(靜態(tài)編譯將所有的都弄進來了)...此時可以正確執(zhí)行程序的所有功能.
2. 如果main.c采取動態(tài)編譯的方式編譯時鏈接動態(tài)庫 liba2.so, liba2.so, liba3.so
最后生成的可執(zhí)行文件為幾百k, 然后將這三個庫liba2.so, liba2.so, liba3.so用ldconfig設置一下,使得程序運行時能正確加載它們.
但此時生成的可執(zhí)行文件main卻有某些功能運行時出現(xiàn)"段錯誤", 而另外一些功能又能正確運行.
這難道說明動態(tài)庫里有一些"符號"不存在,動態(tài)加載時不能找到它???
ps:上面說明兩個可執(zhí)行程序大小的差異,是為了請教:
1. 可否在靜態(tài)編譯時將不會用到的函數(shù)去掉,不鏈接進來,減小可執(zhí)行程序的大小?
2. 這樣生成的靜態(tài)庫與動態(tài)庫,難道其中有些函數(shù)是靜態(tài)庫有,而動態(tài)庫不存在的?(一直覺得相同的 .o文件生成的靜動態(tài)庫里的"符號"應該相同,此時懷疑了.)
請達人指點一下錯誤? (或還需要我提供哪些信息?) |
|