我想尝试使用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中定义的方法?
感谢您的回答!
答案 0 :(得分:1)
对于大型库项目(如openssl),将头文件放在include
目录中,将源文件放在单独的源目录中是很正常的。客户端应用程序需要包含文件和已编译的库 - 但他们不需要库源文件。
回答你的问题:
https://github.com/openssl/openssl/blob/master/apps/ec.c
此外,ec.h
中的功能不 已定义。它们在那里声明,并在相应的.c文件中定义。声明和定义之间的区别在C和C ++中都很重要。
最后, 是<{1}}标题对应的ec.c
个文件。这是一个常见的约定,但其他库可能是结构化的,以便有一个标题(为了方便用户使用),但有许多单独的源文件(以帮助组织库)。因此,您可能有ec.h
,ec_core.c
,ec_sign.c
,ec_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源代码,并尝试对源代码进行更改并构建它。
如前所述,您可能会在源格式或二进制格式中定义一些函数,以便最终输出(二进制文件)链接到定义。