2017-05-25 196 views
0

我想在我的android應用程序中使用ffmpeg,考慮到構建庫的大小,我決定寫一段完成簡單視頻任務的c代碼。用預編譯的靜態庫編譯

我已經在我的Mac上測試過我的代碼,它編譯和工作正常。現在對於NDK部分,我無法成功編譯它,我有幾個問題,希望有人給我一個指導。

  1. 我可以交叉編譯我的c代碼與安裝在我的Mac上的靜態ffmpeg庫嗎?或者如果我必須在我的代碼中使用之前交叉編譯它們?
  2. 靜態庫的大小是10Mb,我的c代碼只有幾行,我的最終共享庫有多大?大約10Mb?

任何解釋可以理解

回答

1
  1. 當然,靜態庫需要定位的相同的體系結構,所以這必須是交叉編譯爲好。

  2. 它取決於靜態庫的結構。靜態庫通常只是對象(.o)文件的存檔。所以如果你的圖書館有足夠小的翻譯單元,而你的程序只使用其中的一小部分,那麼只有這些纔會真正與你的可執行文件鏈接。如果程序庫編譯爲-ffunction-sections -fdata-sections(將靜態存儲器的所有功能和所有對象放在自己的段中),然後在鏈接過程中通過-Wl,--gc-sections,則結果可能會更小,因此任何未使用的段都將被丟棄。另一方面,你可能會遇到這樣一種情況:你需要調用一些內部需要接近所有其他庫代碼的庫的功能,因此最終會將整個庫鏈接到可執行文件中。因此:取決於,試用,如果你關注尺寸,試試--gc-sections