2010-08-16 32 views
11

我正在使用Visual Studio 2008 C++項目(Visa 32位)。Compiler not following symbolically links in Visual Studio C++

我在我的源代碼中包含以下#include指令。

#include <example/header.h> 

在我的包含路徑我指定的 '示例'的父目錄,即

C:/.../include 

在哪裏頭的完整路徑看起來像

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

然而,「示例'是符號鏈接(通過文件資源管理器'新快捷方式'創建'A'.lnk')。我收到以下錯誤

C:\ Foo.cpp中(37):致命錯誤C1083:無法打開包含文件: '例如/ header.h':沒有這樣的文件或目錄

如果我將替換爲實際目錄的符號鏈接,項目將正確編譯。出於實際的原因,我需要它是一個符號鏈接。無論如何要讓Visual Studio預處理器遵循鏈接?

+1

爲了讓您的問題描述更加清晰,您可能需要將'example.h'更改爲'header.h'或其他內容,稍後參考'example',因此開始時有點難以遵循。 – Cam 2010-08-16 05:00:14

+0

@Cam:完成。我試圖重新提出這個問題,使其更清晰。 – Akusete 2010-08-16 05:08:30

+0

好得多;)...如果你從桌面瀏覽到'example',它能正常工作嗎?另外,您是使用實際的「符號鏈接」,還是使用「連接點」? (最後一個問題可能看起來毫無意義/顯而易見,但我只想確定) – Cam 2010-08-16 05:19:12

回答

10

鏈接是一個符號鏈接方式(.lnk)

你確定你不是創建一個快捷方式?快捷方式的工作級別高於符號鏈接,對應用程序沒有任何意義。相反,符號鏈接(如果正確創建的話)應該可以正常讀取/寫入文件/文件夾。

有關更多詳細信息,您不妨考慮閱讀article about symbolic links,它解釋瞭如何使用mklink創建符號鏈接。

這裏是從「伯納德Kerckenaere」那篇文章的評論的有用片段:

  • 快捷方式:在操作系統級別(以誰願意 讀應用/寫的鏈接,這是隻是 意義的文件)

  • 軟連接(或符號連接):像一條捷徑,但在文件系統層面 (應用程序讀/寫 鏈接,將實際讀/寫 文件鏈接到) ... 這將跨分區工作,或者驅動

  • 硬鏈接:僅適用於文件,會發生什麼情況是,有指向同一 物理數據的多個 文件條目,當你刪除一個 項,另將仍然有效, 數據將不會被刪除,直到所有條目 被刪除(如果用軟鏈接你刪除原來的目錄 , 鏈接將不再工作!) - >你顯然只能創建硬鏈接到同一分區上的文件

要創建的是符號鏈接可以使用mlink參數/D參數進行設置。

+0

啊......我沒有頻繁的開發窗戶。我很驚訝'ln -s',在cygwin中創建了一個'.lnk'文件 – Akusete 2010-08-16 05:54:23

+0

我正在將一個linux項目移植到windows,並且腳本使用'ln -s'生成頭文件鏈接,這在cygwin上創建了快捷鍵而不是實際的符號鏈接 – Akusete 2010-08-16 05:59:51

+0

@Akusete:啊 - 這很煩人。我並不是很熟悉* nix開發或cygwin(儘管我正在努力解決這個問題!),但我認爲你不能通過cygwin輕鬆創建符號鏈接。你可以用mklink調用來替換ln -s實例嗎? – Cam 2010-08-16 06:06:57

1

.lnk不是符號鏈接,它是Explorer的快捷方式文件。 要創建硬鏈接,使用

fsutil hardlink create link_name file_name 

在Vista中,有mklink實用程序來創建符號鏈接。

0

當涉及到符號鏈接時,老版本的Visual Studio有點挑剔。使用\H參數的文件上的硬鏈接幾乎無法工作,但使用\D對整個目錄進行符號鏈接通常很好。之後,您可能需要刪除文件夾並將其重新添加到您的項目中。

相關問題