2017-05-25 145 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