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

Can I compile a C program which depends of a library, but this library isn´t a .h file is a binary file, because it was compiled anteriority?

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

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

如果您的程序正在使用此外部编译库中的函数 func(),那么您需要:

  1. func() 声明 - 通常它将在头文件中(通常随库提供)。如果这个文件被称为 profile.h 你会 #include 它来自你的程序中调用 func().
  2. 的源代码
  3. func() definition - 这个函数的实现 - 虽然你看不到,但它一定在这个库的二进制文件中。您可以通过 运行 和 nm libprofile.a 来验证它,它将向您显示库的函数名称(尽管有时如果编译时其符号被剥离,它可能不会显示它们)。

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

如果您没有 定义 - 您的代码不会 link.