编译带OpenSSL的Open62541库配置异常,连接S7-1500端点失败求助
解决open62541编译时安全策略未启用及CMake变量未使用警告问题
问题根源分析
CMake警告里提到的变量未被使用,说明你配置的部分CMake选项和当前用的open62541版本不匹配:
- 新版本open62541已经把
UA_ENABLE_CLIENT和UA_ENABLE_SERVER合并成UA_ENABLE_CLIENTSERVER(默认开启),单独设置这两个变量会被直接忽略。 - 安全策略相关选项的命名可能已经变更,或者CMake没正确识别到OpenSSL,导致安全策略代码没被编译进库中。
解决方案步骤
1. 修正CMakeSettings.json配置
替换过时变量,确保OpenSSL路径正确,启用所需安全策略。以下是调整后的配置示例:
{ "configurations": [ { "name": "x64-Debug", "generator": "Ninja", "configurationType": "Debug", "inheritEnvironments": [ "msvc_x64_x64" ], "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "", "buildCommandArgs": "", "ctestCommandArgs": "", "variables": [ { "name": "CMAKE_MSVC_RUNTIME_LIBRARY", "value": "MultiThreadedDebugDLL", "type": "STRING" }, { "name": "UA_ENABLE_AMALGAMATION", "value": "OFF", "type": "BOOL" }, { "name": "UA_BUILD_SHARED_LIBS", "value": "OFF", "type": "BOOL" }, { "name": "UA_ENABLE_CLIENTSERVER", "value": "ON", "type": "BOOL" }, { "name": "UA_ENABLE_ENCRYPTION", "value": "OPENSSL", "type": "STRING" }, { "name": "UA_ENABLE_ALL_SECURITYPOLICIES", "value": "ON", "type": "BOOL" }, { "name": "OPENSSL_ROOT_DIR", "value": "C:/PROGRA~1/OpenSSL-Win64", "type": "PATH" }, { "name": "OPENSSL_INCLUDE_DIR", "value": "C:/PROGRA~1/OpenSSL-Win64/include", "type": "PATH" }, { "name": "OPENSSL_LIBRARIES", "value": "C:/PROGRA~1/OpenSSL-Win64/lib/libssl.lib;C:/PROGRA~1/OpenSSL-Win64/lib/libcrypto.lib", "type": "STRING" }, { "name": "UA_ENABLE_SUBSCRIPTIONS", "value": "ON", "type": "BOOL" }, { "name": "UA_ENABLE_METHODCALLS", "value": "ON", "type": "BOOL" }, { "name": "UA_ENABLE_ACCESSCONTROL", "value": "ON", "type": "BOOL" }, { "name": "UA_ENABLE_DISCOVERY", "value": "ON", "type": "BOOL" }, { "name": "UA_BUILD_EXAMPLES", "value": "OFF", "type": "BOOL" }, { "name": "UA_BUILD_TOOLS", "value": "OFF", "type": "BOOL" } ] } ] }
2. 关键调整说明
- 用
UA_ENABLE_CLIENTSERVER替代UA_ENABLE_CLIENT和UA_ENABLE_SERVER,适配新版本open62541的选项规则。 - 添加
UA_ENABLE_ALL_SECURITYPOLICIES=ON,确保所有安全策略(包括Basic256Sha256)被编译。如果只想启用特定策略,可查当前open62541版本对应的正确选项名(部分版本用UA_SECURITY_POLICY_BASIC256SHA256)。 - 明确指定
OPENSSL_INCLUDE_DIR和OPENSSL_LIBRARIES,避免CMake自动查找OpenSSL失败。
3. 清理缓存并重新构建
- 删除
out/build/x64-Debug目录下的所有文件,彻底清理CMake缓存。 - 在Visual Studio中重新生成CMake缓存,等配置完成后重新编译open62541库。
4. 验证构建结果
- 检查CMake输出日志,确认以下信息:
Found OpenSSL: C:/PROGRA~1/OpenSSL-Win64/lib/libcrypto.lib (found suitable version "3.6.2", minimum required is "1.1.0")
Enabled security policy: http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 - 用编译后的库重新测试S7-1500端点连接,确认Basic256Sha256策略不再被拒绝。
内容的提问来源于stack exchange,提问作者mortierpeter
相关产品推荐
相关产品推荐

