如何安装包含/crypto/cms/cms_lcl.h等头文件的OpenSSL?
无需手动复制获取OpenSSL内部CMS文件的方法
首先明确:cms_lcl.c和cms_lcl.h是OpenSSL的内部实现文件,默认包管理安装(如Ubuntu的libssl-dev)或源码默认编译安装都不会将其放到系统公开目录,因为它们不属于对外暴露的标准API范畴。
分场景解决方案
场景1:仅使用OpenSSL公开CMS API
如果你的程序只是通过openssl/cms.h提供的公开函数(如创建、解析CMS_ContentInfo)操作,完全不需要直接访问结构体内部成员,直接按常规方式编译即可:
- 确保安装了
libssl-dev包(Ubuntu),或源码安装的OpenSSL库 - 编译命令示例:
gcc your_program.c -o your_program -lssl -lcrypto
场景2:必须访问CMS_ContentInfo内部成员
若因自定义扩展等需求必须操作结构体内部成员,可通过以下两种非手动复制的方式处理:
方法1:自定义编译安装OpenSSL并包含内部文件
- 下载并解压OpenSSL源码包(推荐LTS稳定版本),进入源码目录
- 执行配置命令,指定自定义安装前缀:
./config --prefix=/usr/local/openssl-full --openssldir=/usr/local/openssl-full shared zlib - 打开生成的
Makefile,找到INSTALLHEADERS对应的段落,将crypto/cms/cms_lcl.h添加到头文件安装列表中 - 执行编译安装:
make -j$(nproc) && sudo make install - 编译自己的程序时,指定自定义安装的头文件和库路径:
gcc your_program.c -o your_program -I/usr/local/openssl-full/include -L/usr/local/openssl-full/lib -lssl -lcrypto
方法2:编译程序时直接引用OpenSSL源码目录
无需修改OpenSSL安装配置,直接在编译自己的程序时添加源码路径:
gcc your_program.c -o your_program -I/path/to/openssl-source/include -I/path/to/openssl-source/crypto/cms -lssl -lcrypto
注意事项
直接依赖OpenSSL内部文件存在版本兼容性风险,不同版本的内部结构体定义可能发生变更,建议优先使用OpenSSL官方提供的公开API完成需求。
内容的提问来源于stack exchange,提问作者user18197583
相关产品推荐
相关产品推荐

