OPENSSL_API_LEVEL > OPENSSL_CONFIGURED_API The requested API level higher than t

在尝试升级OpenSSL并指定自定义目录进行安装后,遇到编译失败的问题。通过修改INCLUDEPATH和LIBS,添加-llz4选项,成功解决了编译链接错误。

升级openssl后链接编译不通过,直接Configure  到自己的目录

./Configure  --prefix=/home/cmydev/ssl --openssldir=/home/cmydev/ssl 

make 

make install

然后改成用安装的目录编译即可 
INCLUDEPATH += /home/cmyenv/lz4-dev/lib
LIBS += -L/home/cmyenv/lz4-dev/lib -llz4
 

运行py文件报错:/usr/bin/python3 /Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/pydev/pydevd.py --multiprocess --qt-support=auto --client 127.0.0.1 --port 64866 --file /Users/shenxin/Desktop/176All/project/jiaoben/scriptproject/great/takealot_review250609amz/takealot_review_20250609amz.py AmazonCategories_20241018.csv _tal AmazonCategories_20241018_1.csv > outputamz.log 2>&1 & Connected to pydev debugger (build 223.8836.43) /Users/shenxin/Desktop/176All/project/jiaoben/scriptproject/great/takealot_review250609amz/takealot_review_20250609amz.py:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses import imp /Library/Python/3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020 warnings.warn( Traceback (most recent call last): File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "/Library/Python/3.9/site-packages/emoji/__init__.py", line 1, in <module> from .models import Emoji as emoji_class File "/Library/Python/3.9/site-packages/emoji/models.py", line 14, in <module> from . import settings File "/Library/Python/3.9/site-packages/emoji/settings.py", line 5, in <module> EMOJI_IMG_TAG = getattr(settings, 'EMOJI_IMG_TAG', ( File "/Users/shenxin/Library/Python/3.9/lib/python/site-packages/django/conf/__init__.py", line 79, in __getattr__ self._setup(name) File "/Users/shenxin/Library/Python/3.9/lib/python/site-packages/django/conf/__init__.py", line 60, in _setup raise ImproperlyConfigured( django.core.exceptions.ImproperlyConfigured: Requested setting EMOJI_IMG_TAG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. python-BaseException Traceback (most recent call last): File "/Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/pydev/_pydevd_bundle/pydevd_xml.py", line 161, in _get_type def _get_type(self, o, type_object, type_name): File "/Users/shenxin/Library/Python/3.9/lib/python/site-packages/django/utils/functional.py", line 254, in inner def inner(self, *args): File "/Users/shenxin/Library/Python/3.9/lib/python/site-packages/django/conf/__init__.py", line 51, in _setup def _setup(self, name=None): django.core.exceptions.ImproperlyConfigured: Requested settings, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. Process finished with exit code 1
06-11
<think>我们正在讨论OpenSSL中的API级别检查。用户的问题是如何检查当前OpenSSL API级别是否高于配置的API级别。在OpenSSL中,我们可以使用预处理器宏来进行这种检查。 OpenSSL提供了宏`OPENSSL_API_COMPAT`来设置应用程序所期望的API兼容级别(即配置的API级别),而`OPENSSL_VERSION_NUMBER`宏则提供了当前OpenSSL库的版本号(以十六进制形式表示)。但是,从OpenSSL 3.0开始,引入了更细粒度的API级别控制,使用`OPENSSL_API_LEVEL`宏来定义当前库的API级别。 在代码中,我们可以这样写: ```c #if OPENSSL_API_LEVEL > OPENSSL_API_COMPAT // 当前API级别高于配置的兼容级别,需要采取一些措施(比如使用废弃函数时可能会产生警告或错误) #else // 当前API级别不高于配置的兼容级别,安全 #endif ``` 但是,需要注意的是,`OPENSSL_API_LEVEL`和`OPENSSL_API_COMPAT`都是编译时定义的宏。因此,在编写代码时,我们可以使用这些宏来条件编译代码,以确保在较高版本的OpenSSL中不使用已被废弃的函数。 然而,用户的问题是如何检查“OPENSSL_API_LEVEL”是否大于“OPENSSL_CONFIGURED_API”。这里,“OPENSSL_CONFIGURED_API”可能指的是用户配置的兼容级别,即`OPENSSL_API_COMPAT`。所以,我们可以使用上述条件判断。 但是,我们还需要注意,在OpenSSL 3.0之前,这些宏可能没有定义。因此,为了兼容旧版本,我们可以先检查这些宏是否定义。 下面是一个示例代码片段,展示如何检查当前OpenSSL API级别是否高于配置的API级别: ```c #include <openssl/opensslv.h> /* 假设用户配置的兼容级别为某个值,例如 0x10100000L 表示 OpenSSL 1.1.0 */ /* 在实际应用中,OPENSSL_API_COMPAT 通常在编译前通过-D选项定义,比如 -DOPENSSL_API_COMPAT=0x10100000L */ /* 检查是否定义了 OPENSSL_API_LEVELOPENSSL_API_COMPAT */ #if defined(OPENSSL_API_LEVEL) && defined(OPENSSL_API_COMPAT) # if OPENSSL_API_LEVEL > OPENSSL_API_COMPAT /* 当前API级别高于配置的兼容级别 */ /* 这里可以处理API级别过高的情况 */ # else /* 当前API级别不高于配置的兼容级别,安全 */ # endif #else /* 对于OpenSSL 3.0之前的版本,或者没有定义这些宏的情况,我们可能需要根据版本号进行判断 */ /* 例如,我们可以使用 OPENSSL_VERSION_NUMBER */ /* 注意:在旧版本中,没有API级别概念,通常认为API是稳定的 */ #endif ``` 注意:在OpenSSL 3.0之前,API级别控制并不存在,因此我们通常认为在旧版本中,只要版本号匹配,API就是兼容的。所以,在旧版本中,我们可以通过比较`OPENSSL_VERSION_NUMBER`和用户期望的版本号来判断兼容性。 但是,用户的问题明确提到了“OPENSSL_API_LEVEL”和“OPENSSL_CONFIGURED_API”,所以我们主要关注OpenSSL 3.0及以后版本。 另外,用户的问题中写的是“OPENSSL_CONFIGURED_API”,但在OpenSSL中,配置的API级别通常使用`OPENSSL_API_COMPAT`宏。因此,我们假设用户所指的就是`OPENSSL_API_COMPAT`。 总结:在代码中,我们可以使用预处理条件`#if OPENSSL_API_LEVEL > OPENSSL_API_COMPAT`来检查当前OpenSSL API级别是否高于配置的API级别。 §§相关问题§§ 1. OpenSSL 3.0中API级别是如何划分的? 2. 如何在使用OpenSSL时配置API兼容级别? 3. 在OpenSSL 3.0中,如何处理已被废弃的函数?</think>### 检查 OpenSSL API 级别是否高于配置级别 在 OpenSSL 开发中,可以通过预处理宏检查 API 级别关系: ```c #if OPENSSL_API_LEVEL > OPENSSL_CONFIGURED_API // 当前 API 级别高于配置级别时的处理逻辑 printf("警告:当前 API 级别 (%d) 高于配置级别 (%d)\n", OPENSSL_API_LEVEL, OPENSSL_CONFIGURED_API); #else // 当前 API 级别不高于配置级别 #endif ``` #### 关键概念说明: 1. **`OPENSSL_API_LEVEL`** 表示当前 OpenSSL 库的 API 版本级别(编译时确定) 2. **`OPENSSL_CONFIGURED_API`** 表示应用程序配置的目标 API 级别(通常通过编译标志定义,如 `-DOPENSSL_CONFIGURED_API=10100`) 3. **版本号规范** OpenSSL 使用十六进制版本号格式:`0xMNNFFPPS` 例如 `0x1010100f` 表示 1.1.1 版本 #### 使用场景: 当需要确保代码在特定 OpenSSL 版本上运行时,可通过此检查: ```c // 强制要求最低 API 级别为 1.1.0 #if !defined(OPENSSL_CONFIGURED_API) #define OPENSSL_CONFIGURED_API 0x10100000 #endif #if OPENSSL_API_LEVEL < OPENSSL_CONFIGURED_API #error "OpenSSL 版本过低,需要 1.1.0 或更高版本" #endif ``` #### 版本兼容性建议: 1. 使用 `OPENSSL_VERSION_NUMBER` 获取完整版本号 2. 废弃函数应使用 `#if OPENSSL_API_LEVEL < ...` 做条件编译 3. 重要变更参考 OpenSSL 的 [CHANGES.md](https://github.com/openssl/openssl/blob/master/CHANGES.md) 文件[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值