2011-01-19 39 views
20

Tôi đang cố gắng biên dịch JRTPLIB trong Visual Studio 2010 trên windows 7. Đó là một cơn ác mộng thực sự ... nhưng tôi đang thu hẹp các vấn đề.Lỗi _ITERATOR_DEBUG_LEVEL trong studio trực quan

Điều này còn lại.

Error 3 error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in client.obj C:\Users\Johan-bar\Documents\Visual Studio 2010\Projects\client\client\jrtplib.lib(rtpsession.obj) client 

Tôi googled một tấn và nguyên nhân có vẻ như được biên dịch trong chế độ gỡ lỗi trong khi chế độ khác được biên dịch ở chế độ phát hành.

Tôi đang nhằm biên dịch bản phát hành Bản phát hành vì tôi muốn thử nghiệm trên các máy tính khác nhau.

1) Cái nào không ở chế độ Phát hành, JRTPLIB hoặc ứng dụng khách (của tôi, cái nào đang cố biên dịch)?

2) Làm thế nào để thay đổi ITERATOR_DEBUG_LEVEL? Cả hai đều đang sử dụng Runtime Library/MT và các định nghĩa tiền xử lý WIN32, _MT, cùng với các giá trị mặc định mà tôi đoán.

Chúc mừng

+1

Tôi muốn câu trả lời cho câu hỏi của bạn # 1 - không có trong chế độ Phát hành. Nó không rõ ràng từ thông báo lỗi. – morgancodes

Trả lời

11

Biên dịch mọi thứ bạn sử dụng với tùy chọn -D_ITERATOR_DEBUG_LEVEL = 0. Nó là như vậy theo mặc định trong chế độ phát hành năm 2010 VS, nhưng một số điều vẫn được xây dựng với các tùy chọn khác và do đó không tương thích nhị phân.

Trong các studio trực quan cũ hơn có _SECURE_SCL và tôi không chắc liệu một số mã có thể vẫn sử dụng được không. Đặt một nơi nào đó (nói vào stdafx.h) kiểm tra tĩnh rằng những trận đấu này.

#if _ITERATOR_DEBUG_LEVEL == 0 && _SECURE_SCL != 0 
#error _SECURE_SCL != 0 while _ITERATOR_DEBUG_LEVEL == 0 
#endif 

Nếu bạn muốn xem giá trị nào _ITERATOR_DEBUG_LEVEL thì bạn có thể sử dụng một số thông điệp #pragma trong mã để cho bạn biết.

+0

-D_ITERATOR_DEBUG_LEVEL = 0 trong "C/C++" -> Dòng lệnh? Nó không thay đổi bất cứ điều gì, vẫn còn lỗi tương tự. Tôi đã thêm mã bạn đã đề cập và nó không kích hoạt. – KaiserJohaan

+0

Bạn đã sử dụng tùy chọn cho cả jrtplib và ứng dụng khách? Sau đó, một cái gì đó trong mã đang thay đổi nó bằng cách nào đó. –

+0

là không có gì khác người ta có thể làm gì? Những vấn đề trình biên dịch này thực sự gây phiền nhiễu, dành nhiều thời gian hơn cho việc sửa lỗi nó hơn là viết mã>. KaiserJohaan

6

Giải pháp:

Project Pages >> Configuration Properties >> C,C++ >> Preprocessor >> Preprocessor Definitions 

Thêm _ITERATOR_DEBUG_LEVEL=0 trong đó làm việc. Xem thêm: How to set _ITERATOR_DEBUG_LEVEL in VS2010?

+0

kết hợp tốt đẹp của 'đây là câu trả lời 'và' có nghĩa là gì ' – thecoshman

0

Tôi đã tìm thấy một cách khác để tạo ra các lỗi này.

Tôi đã sử dụng công cụ xây dựng hàng loạt Visual Studio 2010 để xây dựng tất cả các kết hợp nền tảng và cấu hình có thể có và tôi đã gặp phải các lỗi này. Nhìn vào đầu ra cho thấy rằng việc xây dựng hàng loạt không tôn trọng các phụ thuộc của dự án - do đó liên kết một thư viện cũ từ bản phát hành Bản phát hành với một tệp debj obj được biên dịch mới.

Một số dòng sau trong đầu ra xây dựng nó đã xây dựng phiên bản Gỡ lỗi của thư viện.

Thực hiện "xây dựng hàng loạt" thủ công (tức là chọn theo cách thủ công các kết hợp nền tảng và cấu hình khác nhau) đã tạo bản dựng sạch.

Đạo đức: Không sử dụng xây dựng hàng loạt Visual Studio 2010. Tôi không biết liệu họ đã sửa lỗi này trong các phiên bản sau của VS.

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