【问题标题】:Are there utilities for converting static libraries to C header?是否有将静态库转换为 C 头文件的实用程序?
【发布时间】:2021-08-05 11:16:57
【问题描述】:

嗨,我知道这个问题听起来很奇怪,但是突然出现了 就是这么一个实用程序,我没找到。

是否有从静态库生成标头的程序或脚本?

例如,有一个函数 foo,我知道它位于为特定架构编译的静态库中,无需调用系统调用和它可能依赖的其他东西,只是计算某些东西并返回结果的代码。如果有脚本,它可以将已经编译好的代码提取出来,作为静态变量(section)呈现在头文件中,并添加foo函数,调用时将静态变量转换为函数引用并调用。

对于必要的,是的,答案有点奇怪,但是很容易将已经编译好的库添加为简单的头文件,而无需更改程序的链接。

【问题讨论】:

  • 不,基本上不可能。对于非平凡的函数,库中的目标代码通常不包含足够的信息来正确确定预期的参数类型是什么。
  • 向库作者询问 .h 文件。
  • 您的问题措辞毫无意义。您是否想要一个头文件来声明库的接口,或者实际上要将库反编译作为头文件中的源代码。后者是不可能的,在任何情况下你都不希望代码在标题中。您需要的是创建库的原始源代码。编译是一个单向过程。

标签: c gcc embedded clang


【解决方案1】:

基本上答案是否定的 - 没有办法仅从库中全面了解库的 C 接口。话虽如此 - 使用调试符号可能会获得接口的一些外观,但这不是一个强大的解决方案,因为它不会提取非平凡的类型。

【讨论】:

  • 创建一个 known 文档接口的标头是微不足道的,但问题似乎是从静态库中提取代码 (本质上是反编译)。这个答案没有解决这个问题。
  • @Clifford 据我了解,他们在询问如何从库中提取到库的接口 - “库中的标题”。但是,如果他们确实意味着完美地重建原始界面而不是生成新界面,那么您是对的
  • 我想你误解了我的意思。请参阅我对实际问题的评论。可能还不清楚,但似乎不是关于 interfaces 而是标题中的实际实现 - 这本身没有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2019-09-26
相关资源
最近更新 更多