我可以编译依赖于一个库的C程序,但是该库不是.h文件而是二进制文件,因为它是预先编译的?

时间:2019-05-21 23:48:27

标签: c unix compilation solaris

大家好,接下来是问题,我有一个用C语言编写的程序(program_a.c),该程序依赖于他体内未声明的某些功能,因为该功能位于另一个文件中(library.h) ,但是我没有文件.h或.c文件,只有编译为二进制文件的版本。我可以编译程序并使用不是.h或.c文件的库吗?

2 个答案:

答案 0 :(得分:1)

如果您知道该库中的函数,则可以创建自己的library.h来使编译器成功运行,然后只需要链接器即可确保library.o(或.a或...)已链接。

答案 1 :(得分:1)

如果您的程序正在使用此外部编译库中的函数func(),则需要具备以下条件:

  1. func() 声明-通常在头文件中(通常随库一起提供)。如果此文件名为profile.h,则可以从程序中调用#include的源代码中func()来使用它。
  2. func() 定义-此功能的实现-尽管您看不到它,但它必须在此库的二进制文件中。您可以通过运行nm libprofile.a来进行验证,该操作将向您显示库的函数名称(尽管有时在编译时除去其符号时它可能不显示它们)。

如果您没有声明-您的代码将无法编译。

如果您没有定义-您的代码将不会链接。