Компилятор, не переходящий по символьным ссылкам в Visual Studio C++

Я использую проект C++ Visual Studio 2008 года (Виза 32 бита).

У меня есть следующая #include директива в моем исходном коде.

#include <example/header.h>

В моем включать путь я указываю родительский каталог 'примера', т.е.

C:/.../include

где полный путь к заголовку похож

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

Однако 'примером' является символьная ссылка ('.lnk', созданный с помощью файлового менеджера 'новый ярлык'). Я получаю следующую ошибку

c:...\foo.cpp (37): фатальная ошибка C1083: не Может открыться включают файл: 'example/header.h': Никакой такой файл или каталог

Если я заменю символьную ссылку фактическим каталогом, то проект скомпилирует правильно. По практическим причинам мне нужен он, чтобы быть символьной ссылкой. Там должен так или иначе заставить препроцессор Visual Studio перейти по ссылке?

11
задан Akusete 16 August 2010 в 05:23
поделиться

2 ответа

Ссылка является символической ссылкой (.lnk)

Вы уверены, что не создаете ярлык? Ярлыки работают на более высоком уровне, чем символические ссылки, и ничего не значат для приложений.

И наоборот, символические ссылки (если они созданы правильно) должны отлично работать с любым приложением, которое читает/пишет файлы/папки.

Для получения более подробной информации вы можете прочитать эту статью о символических ссылках, в которой объясняется, как создать символическую ссылку с помощью mklink.

Вот полезный фрагмент из комментария к этой статье от "Bernard Kerckenaere":

  • ярлык: на уровне операционной системы (для приложений, которые хотят читать/писать ссылку, это просто бессмысленный файл)

  • мягкая ссылка (или символическая ссылка): как ярлык, но на уровне файловой системы (приложения, читающие/пишущие ссылку, на самом деле будут читать/писать файл, на который дана ссылка) ... это будет работать между разделами или дисками

  • жесткая ссылка: только для файлов, что происходит, когда есть несколько записей файлов, которые указывают на одни и те же физические данные, когда вы удаляете одну запись, другие все еще будут работать, данные данные не исчезнут, пока все записи удалены (если с помощью мягкой ссылки вы удалите исходный каталог, то ссылка больше не будет работать!) -> очевидно, что вы можете создавать только жесткие ссылки на файл на том же разделе

То, что вы хотите создать - это символическая ссылка, которую вы можете сделать с помощью параметра /D, используя mlink.

10
ответ дан 3 December 2019 в 09:39
поделиться

.lnk не является символической ссылкой, это файл ярлыка для Проводника. Для создания жесткой ссылки используйте

fsutil hardlink create link_name file_name

В Vista есть утилита mklink для создания символических ссылок.

1
ответ дан 3 December 2019 в 09:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: