包含带有声明的标头时出现许多 OpenSSL 'C3861: .. identifier not found'

Posted

技术标签:

【中文标题】包含带有声明的标头时出现许多 OpenSSL \'C3861: .. identifier not found\'【英文标题】:Numerous OpenSSL 'C3861: .. identifier not found' when header w/ declarations included包含带有声明的标头时出现许多 OpenSSL 'C3861: .. identifier not found' 【发布时间】:2020-04-02 09:40:11 【问题描述】:

我目前正在通过this library 将 ftp 功能添加到项目中。它的一个可选依赖项是OpenSSL,它添加了我正在寻找的更具体的加密功能。我已经将两者都拉下来了,然后构建和安装并添加为附加的包含/依赖项,所有这些都与this answer here 一致。但是,每当我去构建我的项目时,对 OpenSSL 函数或宏的任何调用都被视为“找不到标识符”(调用这些函数或宏的唯一位置是 ftplib.cpp)。

试图解决这个问题:

我已将包含路径更改为绝对路径(这不应该有所作为,因为相关环境变量已包含在项目的“其他包含目录”中)。 我已经重建了整个解决方案(无论如何它只包含一个项目)以重新生成任何预编译的标头。 我已经仔细检查了所有标识符都可以在包含的ssl.h header 中找到。 检查 OpenSSL 没有使用任何命名空间。 预处理了offending file,它确实包含了这些标识符的声明(如ssl.h header所示)! 我已经成功编译/构建了预处理的源文件,但不会调试并抱怨缺少 dll。

这个最终测试告诉我,理论上,一切都应该正常工作?如果其他人有任何想法或见解,我将不胜感激!

【问题讨论】:

似乎找不到 openssl lib/dll。你可以尝试静态链接openssl,看看是否能解决问题? 请提供minimal reproducible example 代码和完整的错误信息,不要依赖外部链接 @melk,是的,静态链接解决了问题。谢谢,不知道为什么我没想过要试试。但是,为什么它无法找到 lib/dll,它们在添加 lib 目录中评估为正确的绝对路径?我相信这可能是多种原因,但请随时记下它作为高分的答案! 【参考方案1】:

如 cmets 中所述,问题似乎是程序找不到 openssl-library。一种解决方案是将其静态链接到程序。

在回答您的评论时,很可能您的 IDE 知道 lib 在哪里,但不知道您的程序。尝试将其添加到您的 PATH 变量中,或者将其放在已编译程序所在的同一目录中。

【讨论】:

以上是关于包含带有声明的标头时出现许多 OpenSSL 'C3861: .. identifier not found'的主要内容,如果未能解决你的问题,请参考以下文章

C++:包含父类时出现多重定义错误?

设置 apollo-client 标头时出现 NetworkError

使用基本授权(用户名和密码)时出现 VSTS REST API 错误

将 no-cors 包含在标头中以获取 react.js 中的 json 内容时出现奇怪的错误

仅在发送标头时出现 Cors

在 AWS Lambda 上使用 nodejs“ref”模块时出现“无效的 ELF 标头”