[英]Is it bad practice to use a C header instead of its C++ equivalent in C++ (e.g. stdio.h instead of cstdio)?
[英]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.c
, ec_sign.c
, ec_encrypt.c
, ec_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.