7

Tôi đang cố gắng nâng cấp một giải pháp cũ để sử dụng VS2010 (VC100).Làm cách nào để loại bỏ lỗi C2859 khi cố gắng sử dụng tiêu đề được biên dịch trước với VS2010 (VC100) ở chế độ gỡ lỗi?

Tôi đã thiết lập để stdafx.cpp sẽ tạo tiêu đề được biên dịch trước stdafx.pch từ stdafx.h. Sau đó, tất cả các tệp .cpp khác bao gồm stdafx.h được hướng dẫn sử dụng tiêu đề được biên dịch trước.

Những bài viết đã giúp tôi có được điều này cho đến nay:

Bây giờ tất cả là tốt khi tôi xây dựng trong chế độ phát hành. Tuy nhiên khi tôi thử và xây dựng trong chế độ gỡ lỗi, tôi nhận được toàn bộ đống lỗi nói:

Error 1 error C2859: [removed]\debug\vc100.idb is not the idb file that was used when this precompiled header was created, recreate the precompiled header.

Tôi tin rằng tệp .idb này là tệp gỡ lỗi trung gian được tạo bởi Visual Studio.

Tại sao tôi gặp phải lỗi này? Nói cách khác, tại sao nó không sử dụng tệp .idb này khi nó tạo ra phần đầu được biên dịch trước?

Tôi không chắc bạn cần thêm thông tin gì để có thể trả lời cho tôi, vì vậy, chỉ cần hỏi xem có thêm thông tin mà tôi cần cung cấp hay không.

Trả lời

4

Nhờ một đồng nghiệp tôi nhận được câu trả lời.

Vấn đề là stdafx.cpp có định dạng thông tin gỡ lỗi được đặt thành cơ sở dữ liệu chương trình (/ Zi) trong đó tất cả các tệp khác đã được đặt thành cơ sở dữ liệu chương trình để chỉnh sửa và tiếp tục (/ ZI).

Thay đổi tất cả thành Cơ sở dữ liệu chương trình để chỉnh sửa và tiếp tục (/ ZI) và thực hiện xây dựng lại toàn bộ đã giải quyết được sự cố.

Tôi đoán bản nâng cấp đã được khắc phục bằng cách nào đó.

0

Có lẽ bản phát hành bản phát hành của bạn được định cấu hình để ghi tệp [đã xóa] \ debug \ vc100.idb thay vì [đã xóa] \ release \ vc100.idb? Kiểm tra cài đặt dự án cho bản phát hành bản phát hành của bạn và đảm bảo không có thành phần đường dẫn được mã hóa cứng như vậy.

+0

Bản phát hành bản phát hành không tạo tệp idb vì nó chỉ dành cho gỡ lỗi. Do đó tại sao bản phát hành xây dựng hoạt động và gỡ lỗi thì không. – Steiny

+0

Bản xây dựng bản phát hành theo mặc định không tạo tệp idb nhưng bạn có thể định cấu hình (rất có thể do tai nạn) để làm như vậy. –

+0

Cảm ơn tôi đã tìm ra điều đó một cách khó khăn. Đó là tất cả để làm với các thiết lập định dạng thông tin gỡ lỗi. – Steiny

0

Đây là cách tôi chỉ cố định lỗi này trên Visual Studio 2008:

Bối cảnh:

  • tôi có một giải pháp có chứa hai tiểu dự án.
  • Một dự án biên dịch .dll;
  • Một dự án biên dịch .exe sử dụng .dll này;
  • Dự án .exe phụ thuộc vào dự án .dll;
  • Vấn đề: Tôi đã có cả hai dự án bán kết xuất của họ vào cùng một thư mục, tức là cả hai "OutPutDirectory" và "IntermediateDirectory" được thiết lập để ghi vào một thư mục chung trong thư mục gốc, "../$(ConfigurationName)".

Nguyên nhân của lỗi:

  • Nguyên nhân của lỗi này là khi dự án .dll đã được biên soạn, nó tạo ra tiêu đề biên dịch sẵn (* .pch) trong cùng thư mục như. thư mục exe, và khi dự án .exe được biên dịch, nó sẽ ghi đè nhanh chóng tiêu đề biên dịch sẵn (* .pch) từ dự án .dll.

Việc sửa chữa:

  • Để khắc phục điều này, tôi đã thay đổi "IntermediateDirectory" cho cả hai tiểu dự án để "tạm thời", do đó các tập tin tạm thời (bao gồm cả các tập tin tiêu đề biên dịch sẵn) được ghi vào các thư mục khác nhau.
1

chọn Tắt cho định dạng thông tin gỡ lỗi trong trang thuộc tính cho stdafx.cpp, sau đó quay lại và chọn Thừa kế từ cha mẹ đã làm việc cho tôi.

1

Tôi đã trúng lỗi này với VS2005 khi soạn thảo một dự án nơi $(ProjectName)khác nhau từ tập tin đầu ra thực tế của dự án (ví dụ Linker > Output File không được thiết lập mặc định của $(OutDir)\$(ProjectName).exe nhưng để cái gì khác, ví dụ như $(OutDir)\$(ProjectName)-custom_postfix.exe)

Trong trường hợp này, và rõ ràng là chỉ khi thực hiện xây dựng lại chỉ dành cho dự án, vc80.pdb dường như bị tra cứu sai.

Điều gì đã giúp tôi được bổ sung đặt C/C++ > Output Files > Progam Database File Name thành $(IntDir)\$(TargetName).pdb. (Thay vì mặc định vc80.pdb)

+0

Tôi đã có một tình huống tương tự (sử dụng tên tùy chỉnh, đã làm việc tốt, sau đó đột nhiên gặp lỗi này) nhưng giải pháp đơn giản như xóa thủ công các tệp đầu ra và xây dựng lại. – iX3

+0

@ iX3: Xóa tệp .pdb chỉ giúp cho đến khi bạn cố gắng xây dựng lại giải pháp. Sau đó, nó sẽ thất bại với cùng một lỗi một lần nữa. Câu trả lời ban đầu của Martin Ba đã giải quyết vấn đề cho tôi. – c00000fd

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