包含带有声明的标头时出现许多 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'的主要内容,如果未能解决你的问题,请参考以下文章
设置 apollo-client 标头时出现 NetworkError
使用基本授权(用户名和密码)时出现 VSTS REST API 错误