从大型C库中创建子集

时间:2012-12-15 18:36:27

标签: c embedded gsl

我在C应用程序中使用了GSL库的一些功能。这个库很大,有很多功能和设施,我只想要它们中的一小部分。我的问题是我想在一个小型嵌入式系统上使用我的应用程序,并使用这个大型库使我的编译应用程序如此之大。

是否有任何工具可以从这些大型库中提取特定的函数和文件子集?

提前谢谢大家,

3 个答案:

答案 0 :(得分:5)

  

是否有任何工具可以从这些大型库中提取特定的函数和文件子集?

是 - 这就是链接器的功能。

如果是单个对象代码文件,则库是一个集合。链接器将仅链接实际解析代码中引用所需的那些目标文件。只要库设计者使库充分粒度(理想情况下每个目标文件一个公共函数),那么您链接的应用程序代码将根本不与库的大小相关,只是您明确引用的代码。

所以我的建议是首先构建代码然后看看你是否确实遇到了问题 - 很可能你没有。请记住,您的应用程序可能已经链接了标准C库,而这本身并不会使您的应用程序达到整个库的大小!

链接器将能够输出MAP文件,该文件将准确详细说明链接的对象代码及其中的函数和数据对象。您将能够确定链接的效率 - 请记住,您调用的函数可能会调用库中您未自己明确引用的其他函数。您的链接器也可以输出详细说明这种依赖关系的交叉引用表。

答案 1 :(得分:1)

您实际上可以使用mklibs:https://launchpad.net/mklibs

它可以根据一组bexecutable剥离共享库的未使用部分,具体取决于该库。

您甚至不需要拥有图书馆的代码。

答案 2 :(得分:0)

如果你可以修改GLS库,你可以尝试制作一个超薄版本。

最好的方法是使用doxygen之类的工具生成调用者/被调用者图,而不仅仅选择使用和需要的东西。可能您也可能忽略某些依赖项(例如,日志记录,管理状态,您不需要的选项)。

但是,这种方法需要大量的工作。但是如果你使用的是小型嵌入式系统,那么“瘦身版”的代码就不会那么多,所以选择樱桃可能是合理的。