大家好,接下来是问题,我有一个用C语言编写的程序(program_a.c),该程序依赖于他体内未声明的某些功能,因为该功能位于另一个文件中(library.h) ,但是我没有文件.h或.c文件,只有编译为二进制文件的版本。我可以编译程序并使用不是.h或.c文件的库吗?
答案 0 :(得分:1)
如果您知道该库中的函数,则可以创建自己的library.h
来使编译器成功运行,然后只需要链接器即可确保library.o
(或.a
或...)已链接。
答案 1 :(得分:1)
如果您的程序正在使用此外部编译库中的函数func()
,则需要具备以下条件:
func()
声明-通常在头文件中(通常随库一起提供)。如果此文件名为profile.h
,则可以从程序中调用#include
的源代码中func()
来使用它。func()
定义-此功能的实现-尽管您看不到它,但它必须在此库的二进制文件中。您可以通过运行nm libprofile.a
来进行验证,该操作将向您显示库的函数名称(尽管有时在编译时除去其符号时它可能不显示它们)。如果您没有声明-您的代码将无法编译。
如果您没有定义-您的代码将不会链接。