使用预建静态库编译

Compiling with prebuilt static library

我想在我的 android 应用程序中使用 ffmpeg,考虑到构建库的大小,我决定编写一段 C 代码来完成一个简单的视频任务。

我已经在我的 Mac 上测试了我的代码,它编译并运行良好。现在NDK部分,编译不成功,有几个问题,希望有人能指导一下。

  1. 我可以使用 Mac 上安装的静态 ffmpeg 库交叉编译我的 c 代码吗?或者如果我必须在我的代码中使用它们之前交叉编译它们?
  2. 静态库的大小是10Mb,而我的c代码只有几行,我最终的共享库有多大?大约 10Mb?

任何解释将不胜感激

  1. 当然,静态库需要针对相同的架构,所以这个也要交叉编译。

  2. 这取决于静态库的结构。静态库通常只是对象 (.o) 文件的存档。因此,如果您的库有足够小的翻译单元,并且您的程序只使用其中的几个,那么只有这些才会真正链接到您的可执行文件。如果库 你的程序是用 -ffunction-sections -fdata-sections 编译的(它将所有函数和所有静态存储对象放在它们的 own 段),然后在链接期间传递 -Wl,--gc-sections,因此任何未使用的部分都将被丢弃。另一方面,您可以 运行 在调用 lib 的某些功能的情况下,这些功能在内部需要接近所有其他库代码,因此您最终几乎将整个库链接到您的可执行文件中。因此:视情况而定,尝试一下,如果您担心尺寸,请尝试 --gc-sections