/ usr / include标头的C源文件(例如stdio.h)

时间:2016-04-10 10:53:36

标签: c++ c gcc header include

我想尝试使用openssl,因此希望改变源代码。 我找到了包含/usr/include/openssl/ec.h的代码,显然使用了该标头中的函数。但是我找不到文件ec.c,据我所知,C通常位于标题(openssl-master/include/openssl)。在openssl(Full code there)的github源代码中,ec.h位于{{1}},但没有ec.c

所以: gcc在哪里找到ec.h中定义的方法?

感谢您的回答!

2 个答案:

答案 0 :(得分:1)

对于大型库项目(如openssl),将头文件放在include目录中,将源文件放在单独的源目录中是很正常的。客户端应用程序需要包含文件和已编译的库 - 但他们需要库源文件。

回答你的问题:

https://github.com/openssl/openssl/blob/master/apps/ec.c

此外,ec.h中的功能 已定义。它们在那里声明,并在相应的.c文件中定义。声明和定义之间的区别在C和C ++中都很重要。

最后, 是<{1}}标题对应的ec.c个文件。这是一个常见的约定,但其他库可能是结构化的,以便有一个标题(为了方便用户使用),但有许多单独的源文件(以帮助组织库)。因此,您可能有ec.hec_core.cec_sign.cec_encrypt.c

答案 1 :(得分:0)

我知道您要修改OpenSSL源代码。在C编程中,所有/ h文件都不必具有相应的.c文件。

  

头文件和源之间必须有一对多的映射   文件。即使你没有相应的ec.c for ec.h文件   在OpenSSL下,可以定义ec.h中声明的功能   一些其他地方(在openSSL的任何其他源文件或其他一些   依赖)。最后你的OpenSSL二进制文件是libeay.lib / .so和   SSLeay.lib / .so(考虑到linux平台)会有符号   为相应的函数声明定义。

我假设您正在尝试查看系统安装的OpenSSL库,您只能找到头文件和二进制文件而不是源代码。您可以从git存储库下载OpenSSL源代码,并尝试对源代码进行更改并构建它。

如前所述,您可能会在源格式或二进制格式中定义一些函数,以便最终输出(二进制文件)链接到定义。