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

标签 c unix compilation solaris

我有一个 C 语言的程序 (program_a.c) 这个程序依赖于一些它没有在它的主体中声明的函数,因为这些函数在另一个文件 (library.h) 中,但我没有文件 .h 或文件 .c 只有我编译的版本是二进制文件。

我可以编译我的程序并使用这个不是 .h 或 .c 文件的库吗?

最佳答案

如果您的程序正在使用函数 func()从这个外部编译库然后你需要有:

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

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

如果您没有定义 - 您的代码将无法链接。

关于我可以编译一个依赖库的 C 程序,但是这个库不是 .h 文件,而是一个二进制文件,因为它是先编译的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247627/

相关文章:

linux - 如何重写这个多重 OR 条件,以便它使用 Perl "for"循环?

Linux:常规进程和特权进程之间的 mmap MAP_SHARED OK?

linux - 为什么我不能使用下面的 shell 参数扩展提取主机名的最后三个字符?

c - 解除对带括号和不带括号的函数指针的引用

c - printf 中不存在扫描的 0

c - 使用C,找到N个数组中唯一的数组

c - 在 Visual Studio 2010 中构建 C 代码时 cmath 中的一堆编译错误

haskell - 了解 STG

c - 如何将 ASCII 字符转换为 CGKeyCode?

c - 如何绕过已连接的聚会