【发布时间】:2020-03-16 04:04:41
【问题描述】:
我正在使用 Microsoft Visual Studio Professional 2017 构建一个使用 Poco 库的项目。
背景:
不知道这是否相关,但我只想提一下,我手动下载并构建了 Poco(以及所需的所有其他库),多年来一切都很好。现在我改用 Miniconda3 来管理我的库,通过 conda install -c conda-forge poco 安装 Poco 并从
$(POCO_DIR)/Foundation/include
$(POCO_DIR)/Util/include
...
只是
$(CONDA_LIBS)/include
使用系统变量$(CONDA_LIBS) = D:\CodeLibraries\conda_libs\Library。这个CONDA_LIBS 目录存在并包含一个include/Poco/ 子目录,其中包含所有Poco 头文件和子目录。
问题:
项目编译良好。我遇到了链接器错误,在深入研究时我发现了 Visual Studio 2017 的一些奇怪行为:
当我使用任何 Poco 头文件将光标移动到 #include 指令时,例如
#include "Poco/DateTime.h"
我可以通常键入 CTRL+SHIFT+G 打开并跳转到相关文件。
这行不通了,我收到一个弹出窗口告诉我
D:\CodeLibraries\conda_libs\Library\include\oco\atetime.h
无法打开文件。
注意\(P)oco\(D)atetime.h 中缺少的字母。另请注意,文件已找到,但无法打开。
当我尝试使用子目录中的头文件时,例如
#include "Poco/JSON/Parser.h"
我收到消息
D:\CodeLibraries\conda_libs\Library\include\oco\son\rser.h
无法打开文件。
注意(P)oco\(J)SON\(Pa)rser.h 中缺少的字母“P”、“J”和“Pa”(?!)。
附加信息:
- 当我将 Poco 头文件从 Windows 资源管理器拖放到 Visual Studio (!) 时,弹出相同的错误
- 我可以从打开文件对话框打开这些文件(CTRL+O)
- 我仍然可以使用 CTRL+SHIFT+G 快捷方式在我的项目中打开我自己的头文件,并打开其他库像
gdal.h或 boost 头文件这样的头文件 - 如果我
#include "oco/ateTime.h"(注意缺少的字母)并尝试通过 CTRL+SHIFT+G 打开它,我得到了预期消息“在当前源文件的目录或构建系统路径中找不到文件'oco/ateTime.h'”,下面列出的路径包括D:\CodeLibraries\conda_libs\Library/include。
问题:
知道为什么 Poco 头文件的 CTRL+SHIFT+G 快捷方式和拖放操作都失败了吗?
编辑:
请注意:
- 我不是在询问一般的“找不到文件”错误:我通常可以很好地处理我的包含和库路径,谢谢
- 至少在过去几年中,斜杠和反斜杠在 Visual Studio 中几乎可以互换使用
【问题讨论】:
-
您确定没有第 3 方扩展程序会破坏您的 Visual Studio 设置吗?你也试过\,而不是/?
-
“项目编译正常。我收到链接器错误”,你能用链接器错误更新帖子吗?
-
当您混合不同版本的库(dll、lib 或目标文件)和/或其相应的头文件时,会发生链接器错误。这种情况通常发生在您只引用最新的头文件而不是最新的库时,反之亦然。请确保您链接到您在包含路径中配置的 POCO 的确切版本。如果可能,请使用以前使用的 POCO 版本和您当前通过 conda 配置的 POCO 检查并更新线程。还要检查你的 Visual Studio 项目中是否正确配置了包含和库路径。
-
anaconda.org/conda-forge/poco中提到的POCO的当前版本是1.9.0。
-
还有一件事,你没有提到你是否在你的项目中重新配置了链接器路径。您只提到了包含路径中的更改。
标签: visual-studio visual-c++ visual-studio-2017 poco-libraries