我可以编译一个依赖库的 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()
,那么您需要:
func()
声明 - 通常它将在头文件中(通常随库提供)。如果这个文件被称为 profile.h
你会 #include
它来自你的程序中调用 func()
. 的源代码
func()
definition - 这个函数的实现 - 虽然你看不到,但它一定在这个库的二进制文件中。您可以通过 运行 和 nm libprofile.a
来验证它,它将向您显示库的函数名称(尽管有时如果编译时其符号被剥离,它可能不会显示它们)。
如果您没有 声明 - 您的代码将无法编译。
如果您没有 定义 - 您的代码不会 link.
大家好,下一个问题是,我有一个 C 语言的程序 (program_a.c) 这个程序依赖于一些没有在他体内声明的函数,因为这些函数在另一个文件中 ( library.h),但我没有文件 .h 或文件 .c 只有我编译的版本是一个二进制文件。我可以编译我的程序并使用这个不是 .h 或 .c 文件的库吗?
如果您知道库中的函数,您可以创建自己的 library.h
,这将使编译器成功,然后您只需要链接器来确保 library.o
(或 .a
或...) 已链接。
如果您的程序正在使用此外部编译库中的函数 func()
,那么您需要:
func()
声明 - 通常它将在头文件中(通常随库提供)。如果这个文件被称为profile.h
你会#include
它来自你的程序中调用func()
. 的源代码
func()
definition - 这个函数的实现 - 虽然你看不到,但它一定在这个库的二进制文件中。您可以通过 运行 和nm libprofile.a
来验证它,它将向您显示库的函数名称(尽管有时如果编译时其符号被剥离,它可能不会显示它们)。
如果您没有 声明 - 您的代码将无法编译。
如果您没有 定义 - 您的代码不会 link.