繁体   English   中英

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

[英]C-source file for /usr/include header (e.g. stdio.h)

我想尝试使用openssl并因此想要更改源。 我发现包含#include <openssl/ec.h>代码,并且显然使用了该标头中的函数。 但是我找不到据我所知的C.c.c文件,该文件通常位于标头(位于/usr/include/openssl/ec.h )中。 ec.h位于openssl-master/include/openssl的openssl的github源码中( https://github.com/openssl/openssl ),但是没有ec.c

那么: gcc在哪里寻找ec.h中定义的方法?

谢谢您的回答!

对于大型库项目(例如openssl),通常将头文件放在include目录中,而将源文件放在单独的源目录中。 客户端应用程序所需要的包括文件和编译库-但他们并不需要的库源文件。

要回答您的问题:

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

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

最后,有不必是单个ec.c对应于文件ec.h报头。 这是一个常见的约定,但是其他库的结构可能会这样,以便只有一个标头(为了便于用户使用),但是有许多单独的源文件(以帮助组织库)。 因此,您可能拥有ec_core.cec_sign.cec_encrypt.cec_key_exchange.c

我了解您要修改OpenSSL源代码。 在C编程中,没有必要所有/ h文件都具有对应的.c文件。

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

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

如前所述,您可能已在源格式或二进制格式的某些位置定义了函数,以便最终输出(二进制)链接到定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM