2008-10-31 48 views
7

我的應用程序鏈接到libsamplerate.a。我這樣做是爲了讓分發最終的二進制文件更容易。GCC編譯的靜態庫包含什麼?

我擔心也許在.a文件中的代碼取決於我還需要分發的其他庫。

但是,如果它不,我擔心我通過包含多個副本,如太多,我的應用程序膨脹太多。 libc中。

libsamplerate.a裏面究竟是什麼?只是libsamperate的字節碼?或者更多?

回答

5

靜態庫只是一個目標文件的集合。當您針對靜態庫編譯程序時,程序使用的函數的目標代碼將從庫中複製到可執行文件中。鏈接到一個靜態庫不會導致該庫外的任何函數都包含在您的代碼中。

1

只是libsamplerate的對象代碼。靜態鏈接單個庫不會使所有庫靜態鏈接;那會很糟糕。

6

.a文件基本上只是一組.o文件。您可以使用ar工具演示這一點。

例如,以顯示庫的內容:

ar -t libsamplerate.a 

從頭開始創建某文件:

ar -r tim.a *.txt