问题 编译器不遵循Visual Studio C ++中的符号链接


我正在使用Visual Studio 2008 C ++项目(Visa 32位)。

我有以下内容 #包括 我的源代码中的指令。

#include <example/header.h>

在我的包含路径中,我指定了 'example'的父目录,即

C:/.../include

标题的完整路径是什么样的

C:/.../include/example/header.h

但是,“例子”是一个 象征性的联系 (通过文件浏览器“新快捷方式”创建'.lnk')。我收到以下错误

c:... \ foo.cpp(37):致命错误C1083:无法打开包含文件:'example / header.h':没有这样的文件或目录

如果我 将符号链接替换为实际目录,项目将正确编译。出于实际原因,我需要它作为一个象征性的联系。反正有没有让Visual Studio预处理器跟随链接?


9233
2017-08-16 04:52


起源

为了使您的问题描述更加清晰,您可能希望将“example.h”更改为“header.h”或其他内容,因为您稍后会引用“示例”,因此首先有点难以理解。 - Cam
@Cam:完成。我试图重新提出问题,使其更清晰。 - Akusete
好多了;)...如果你浏览 example 从您的桌面,它是否正常工作?另外,您使用的是实际的“符号链接”,还是使用“结点”? (最后一个问题似乎毫无意义/显而易见,但我只是想确定) - Cam
@Cam:通过文件资源管理器查看符号链接可以正常工作。链接是一个符号链接(.lnk),我甚至不知道什么是交汇点,直到我刚看了:)。 - Akusete
@Akusete:我刚刚测试过,它似乎对我很好。你是如何创建符号链接的? - Cam


答案:


该链接是一个符号链接(.lnk)

你确定你没有创建快捷方式吗?快捷方式的工作级别高于符号链接,对应用程序没有任何意义。

相反,符号链接(如果正确创建)应该适用于任何读/写文件/文件夹的应用程序。

有关详细信息,您可以考虑阅读本文 关于符号链接的文章,它解释了如何使用创建符号链接 mklink

以下是“Bernard Kerckenaere”对该文章发表评论的有用摘录:

  • 快捷方式:在操作系统级别(对于希望的应用程序)   读/写链接,它只是一个   无意义的文件)

  • 软链接(或符号链接):像快捷方式,但在文件系统级别   (应用程序读/写   链接,实际上会读/写   文件链接到)   ...   这将适用于分区或驱动器

  • 硬链接:仅用于文件,会发生的是有多个   指向相同的文件条目   物理数据,删除时   进入,对方仍然会工作,   在所有条目之前,数据不会消失   被删除(如果有软链接你   删除原始目录,   链接将不再有效!)    - >显然,您只能在同一分区上创建指向文件的硬链接

你想要创造的是一个 象征性的联系 你可以做的 /D 参数使用mlink。


10
2017-08-16 05:41



啊......我不经常开窗太多。我很惊讶'ln -s',在cygwin中创建了一个'.lnk'文件 - Akusete
我正在将一个linux项目移植到Windows,脚本使用'ln -s'生成头文件链接,这在cygwin上创建了快捷方式而不是实际的符号链接 - Akusete
@Akusete:啊 - 这太烦人了。我对* nix开发或cygwin并不是非常熟悉(虽然我正在努力修复它!),但我不认为你可以通过cygwin轻松创建一个符号链接。你能用mklink调用替换ln -s实例吗? - Cam
我现在就这么做了......它就像一个魅力。 - Akusete


.lnk不是符号链接,它是Explorer的快捷方式文件。 要创建硬链接,请使用

fsutil hardlink create link_name file_name

在Vista上,有 mklink 用于创建符号链接的实用程序。


1
2017-08-16 05:41





在涉及符号链接时,较旧版本的Visual Studio有点挑剔。使用文件的硬链接 \H 参数几乎没有工作,但使用了符号链接整个目录 \D 通常很好。然后,您可能需要从项目中删除并重新添加文件夹。


0
2018-03-02 14:06