我有一個BB 10/QNX應用程序,我需要使用比BB 10上的默認版本更新版本的SQLite。我想我可以通過將我自己的SQLite代碼與我的應用程序。我意識到在我的qmake生成的Makefile中,選項-lsqlite3被傳遞給qcc。在庫的位置(/選擇/ bbndk/target_10_2_0_1155/QNX6/armle-V7/usr/lib中),我發現了以下文件:可疑的靜態鏈接可執行文件大小
size filename
559386 libsqlite3.a
560662 libsqlite3S.a
15 libsqlite3.so -> libsqlite3.so.1
496503 libsqlite3.so.1
我以爲我可以從編譯我自己的文件替換libsqlite3.a最新的sqlite3.c(合併)。令我困惑的是,我的應用程序可執行文件的大小僅爲180 kB,因此libsqlite3.a中的代碼似乎不在其中。如果SQLite是動態鏈接的,我希望應用程序歸檔(.bar)包含libsqlite3.so,這也不是真的,因爲歸檔只有130 kB大。應用程序如何使用SQLite(通過Qt數據庫類),但SQLite代碼永遠不會將它應用於應用程序存檔?
編譯器將在構建可執行文件時優化並省略靜態庫中不需要/使用的內容。可執行文件不必總是擁有來自靜態庫的所有代碼。 – Rohan 2014-09-24 10:13:29
是的,這是'.a'檔案的整個想法。如果庫做得很好,並且已經分配到非常小的編譯單元,那麼加載程序確實只會在最終的可執行文件中使用它所需要的。 – 2014-09-24 12:38:08