2011-01-19 19 views
20

Próbuję skompilować JRTPLIB w Visual Studio 2010 na Windows 7. To był prawdziwy koszmar ... ale przynajmniej zawężam problemy.Błąd _ITERATOR_DEBUG_LEVEL w visual studio

Zostało to.

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 

I googled tonę i przyczyną wydaje się być jeden jest kompilowany w trybie debugowania, a drugi jest skompilowany w trybie wydania.

Mam zamiar skompilować plik wykonywalny Release, ponieważ chcę przetestować na różnych komputerach.

1) Który z nich nie jest w trybie Release, JRTPLIB lub klient (mój, ten, który próbuje skompilować)?

2) Jak zmienić pozycję ITERATOR_DEBUG_LEVEL? Oba używają Runtime Library/MT i preprocesorów definicji WIN32, _MT, wraz z domyślnymi, jak sądzę.

Cheers

+1

Chciałbym otrzymać odpowiedź na Twoje pytanie nr 1 - które nie jest w trybie Release. Z komunikatu o błędzie nie wynika jasno. – morgancodes

Odpowiedz

11

kompilacji wszystko, czego korzystania z -D_ITERATOR_DEBUG_LEVEL = 0 opcji. Jest tak domyślnie w trybie wydania VS 2010, ale niektóre rzeczy nadal są budowane z innymi opcjami i dlatego nie są kompatybilne z binariami.

W starszych studiach wizualnych było _SECURE_SCL i nie jestem pewien, czy część kodu może nadal z niego korzystać. Umieść gdzieś (powiedz na stdafx.h) statyczną kontrolę, czy pasują do siebie.

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

Jeśli chcesz zobaczyć, co ma wartość _ITERATOR_DEBUG_LEVEL następnie można użyć jakąś wiadomość #pragma w kodzie powiedzieć.

+0

-D_ITERATOR_DEBUG_LEVEL = 0 w "C/C++" -> Wiersz poleceń? To nic nie zmienia, wciąż ten sam błąd. Dodałem kod, o którym wspomniałeś, i to się nie zaczęło. – KaiserJohaan

+0

Użyłeś opcji dla jrtplib i klienta? Potem coś w kodzie zmienia ją jakoś. –

+0

czy nic więcej nie można zrobić? Te problemy z kompilatorem są naprawdę denerwujące, poświęcają więcej czasu na próbę naprawy niż kodowanie>. KaiserJohaan

6

Rozwiązanie:

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

Dodaj _ITERATOR_DEBUG_LEVEL=0 tam pracował. Zobacz też: How to set _ITERATOR_DEBUG_LEVEL in VS2010?

+0

fajne połączenie "tutaj bądź odpowiedź "i" co to znaczy " – thecoshman

0

Znalazłem inny sposób generowania tych błędów.

Wykorzystałem kompilację wsadową Visual Studio 2010 do zbudowania wszystkich możliwych kombinacji platformy i konfiguracji i otrzymywałem te błędy. Patrząc na wynik, okazało się, że kompilacja wsadowa nie respektuje zależności projektu - stąd połączenie przestarzałej biblioteki z wersji Release ze świeżo skompilowanym plikiem Debug obj.

Kilka linii później w kompilacji zbudował wersję Debugowania biblioteki.

Wykonanie "partii" ręcznie (tj. Ręczne wybranie różnych kombinacji platformy i konfiguracji) dało czystą kompilację.

Moralne: Nie używaj kompilacji wsadowej programu Visual Studio 2010. Nie wiem, czy naprawili to w późniejszych wersjach VS.

Powiązane problemy