2010-08-16 40 views
11

Tôi đang sử dụng dự án Visual Studio 2008 C++ (Visa 32 bit).Trình biên dịch không theo các liên kết tượng trưng trong Visual Studio C++

Tôi có #include chỉ thị trong mã nguồn của tôi sau đây.

#include <example/header.h> 

Trong tôi bao gồm con đường tôi chỉ định thư mục mẹ của 'dụ', tức là

C:/.../include 

nơi đường dẫn đầy đủ để tiêu đề trông giống như

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

Tuy nhiên, ' ví dụ 'là một liên kết tượng trưng (A' .lnk 'được tạo qua lối tắt mới của trình khám phá tệp'). Tôi nhận được lỗi sau

c: ... \ Foo.cpp (37): gây tử vong lỗi C1083: Không thể mở bao gồm file: 'dụ/header.h': Không có tập tin hoặc thư mục

Nếu tôi thay thế liên kết tượng trưng bằng thư mục thực tế, dự án sẽ biên dịch chính xác. Vì lý do thực tế tôi cần nó là một liên kết tượng trưng. Có anyway để làm cho Visual Studio pre-processor theo liên kết?

+1

Để làm cho mô tả câu hỏi của bạn rõ ràng hơn một chút, bạn có thể muốn thay đổi 'example.h' thành 'header.h' hoặc một cái gì đó, sau này bạn tham khảo 'ví dụ'. – Cam

+0

@Cam: Xong. Tôi đã cố gắng để lại từ câu hỏi để làm cho nó dễ đọc hơn. – Akusete

+0

Tốt hơn nhiều;) ... Nếu bạn duyệt đến 'example' từ màn hình của bạn, nó có hoạt động đúng không? Ngoài ra, bạn đang sử dụng "liên kết tượng trưng" thực sự hay bạn đang sử dụng "giao lộ"? (câu hỏi cuối cùng có vẻ vô nghĩa/hiển nhiên, nhưng tôi chỉ muốn chắc chắn) – Cam

Trả lời

10

Liên kết là một liên kết tượng trưng (.lnk)

Bạn có chắc chắn bạn không tạo ra một shortcut? Các phím tắt hoạt động ở mức cao hơn các liên kết tượng trưng và không có ý nghĩa gì đối với các ứng dụng.

Ngược lại, các liên kết tượng trưng (nếu được tạo đúng cách) sẽ hoạt động tốt với mọi ứng dụng đọc/ghi vào tệp/thư mục.

Để biết thêm chi tiết, bạn có thể xem xét việc đọc số này article about symbolic links, giải thích cách bạn có thể tạo liên kết tượng trưng bằng cách sử dụng mklink.

Dưới đây là một đoạn hữu ích từ một bình luận trên bài viết mà bởi "Bernard Kerckenaere":

  • shortcut: trên mức hệ điều hành (vào các ứng dụng có nhu cầu đọc/ghi liên kết, đó là chỉ là một tập tin vô nghĩa)

  • liên kết mềm (hoặc liên kết tượng trưng): giống như một phím tắt, nhưng trên bình diện hệ thống tập tin (ứng dụng đọc/ghi vào liên kết , sẽ thực sự đọc/viết các tập tin liên kết đến) ... này sẽ làm việc trên các phân vùng, hoặc ổ đĩa

  • liên kết cứng: chỉ cho các tập tin, những gì xảy ra là có nhiều mục tập tin trỏ đến cùng dữ liệu vật lý, khi bạn xóa một nhập cảnh, ý chí khác vẫn hoạt động, dữ liệu sẽ không biến mất cho đến khi tất cả các mục nhập bị xóa (nếu có liên kết mềm bạn xóa thư mục gốc, liên kết sẽ không hoạt động nữa!) -> bạn rõ ràng chỉ có thể tạo liên kết cứng vào một tệp trên cùng một phân vùng

Điều bạn muốn tạo là liên kết tượng trưng mà bạn có thể thực hiện với tham số /D bằng cách sử dụng mlink.

+0

Ahh ... Tôi không thường xuyên có nhiều cửa sổ để phát triển. Tôi ngạc nhiên 'ln -s', trong cygwin tạo ra một tập tin '.lnk' – Akusete

+0

Tôi đang chuyển một dự án linux tới các cửa sổ và tập lệnh tạo liên kết tập tin tiêu đề bằng cách sử dụng 'ln -s', trên cygwin tạo các phím tắt thay vì thực tế liên kết tượng trưng – Akusete

+0

@Akusete: Ah - điều đó thật khó chịu. Tôi không hề quen thuộc với việc phát triển * nix hay Cygwin (mặc dù tôi đang cố gắng sửa lỗi đó!), Nhưng tôi không nghĩ rằng bạn có thể dễ dàng tạo ra một liên kết tượng trưng thông qua Cygwin. Bạn có thể thay thế các trường hợp ln -s bằng các cuộc gọi đến mklink không? – Cam

1

.lnk không phải là liên kết tượng trưng, ​​đó là tệp lối tắt cho Explorer. Để tạo liên kết cứng, sử dụng

fsutil hardlink create link_name file_name 

Trên Vista, có mklink tiện ích để tạo liên kết tượng trưng.

0

Phiên bản cũ hơn của Visual Studio hơi khó tính khi nói đến các liên kết tượng trưng. Các liên kết cứng trên các tệp sử dụng tham số \H hầu như không bao giờ hoạt động, nhưng việc liên kết toàn bộ các thư mục bằng cách sử dụng \D thường là tốt. Sau đó, bạn có thể cần xóa và thêm lại thư mục từ và đến dự án của mình.

Các vấn đề liên quan