Udostępnij przez


Błąd narzędzi konsolidatora LNK2038

wykryto niezgodność dla wartości "name": wartość "value_1" nie jest zgodna z wartością "value_2" w nazwie pliku.obj

Konsolidator wykrył niezgodność symboli. Ten błąd wskazuje, że różne części aplikacji, w tym biblioteki lub inny kod obiektu, z którymi aplikacja łączy się, używają sprzecznych definicji symbolu. Pragma wykrywania niezgodności służy do definiowania takich symboli i wykrywania ich wartości powodujących konflikt.

Możliwe przyczyny i rozwiązania

Ten błąd może wystąpić, gdy plik obiektu w projekcie jest nieaktualny. Przed wypróbowaniem innych rozwiązań tego błędu wykonaj czystą kompilację, aby upewnić się, że pliki obiektów są aktualne.

Program Visual Studio definiuje następujące symbole, aby zapobiec łączeniu niezgodnego kodu, co może powodować błędy czasu wykonywania lub inne nieoczekiwane zachowanie.

  • _MSC_VER Wskazuje główne i pomocnicze numery wersji kompilatora Microsoft C++ (MSVC) używanego do kompilowania aplikacji lub biblioteki. Kod kompilowany przy użyciu jednej wersji MSVC jest niezgodny z kodem skompilowanym przy użyciu wersji z różnymi numerami wersji głównych i pomocniczych. Aby uzyskać więcej informacji, zobacz _MSC_VER w temacie Wstępnie zdefiniowane makra.

    Jeśli łączysz się z biblioteką, która nie jest zgodna z używaną wersją MSVC i nie możesz uzyskać ani skompilować zgodnej wersji biblioteki, możesz użyć wcześniejszej wersji kompilatora, aby skompilować projekt: zmienić właściwość Zestawu narzędzi platformy projektu na wcześniejszy zestaw narzędzi. Aby uzyskać więcej informacji, zobacz How to: Modify the Target Framework and Platform Toolset (Instrukcje: modyfikowanie platformy docelowej i zestawu narzędzi platformy).

  • _ITERATOR_DEBUG_LEVEL Wskazuje poziom funkcji zabezpieczeń i debugowania, które są włączone w standardowej bibliotece języka C++. Te funkcje mogą zmieniać reprezentację niektórych obiektów biblioteki standardowej języka C++, a tym samym sprawić, że będą one niezgodne z tymi, które korzystają z różnych funkcji zabezpieczeń i debugowania. Aby uzyskać więcej informacji, zobacz _ITERATOR_DEBUG_LEVEL.

  • RuntimeLibrary Wskazuje wersję standardowej biblioteki języka C++ i środowiska uruchomieniowego języka C używanego przez aplikację lub bibliotekę. Kod korzystający z jednej wersji standardowej biblioteki języka C++ lub środowiska uruchomieniowego języka C jest niezgodny z kodem, który używa innej wersji. Aby uzyskać więcej informacji, zobacz /MD, /MT, /LD (Użyj biblioteki czasu wykonywania).

  • _PPLTASKS_WITH_WINRT Wskazuje, że kod korzystający z biblioteki wzorców równoległych (PPL) jest połączony z obiektami skompilowanymi przy użyciu innego ustawienia dla opcji kompilatora /ZW . (/ZW obsługuje język C++/CX). Kod, który używa lub zależy od PPL, musi być skompilowany przy użyciu tego samego /ZW ustawienia używanego w pozostałej części aplikacji.

Upewnij się, że wartości tych symboli są spójne w projektach w rozwiązaniu programu Visual Studio, a także że są one spójne z kodem i bibliotekami, z którymi aplikacja łączy się.

Problemy z biblioteką innych firm i oprogramowanie vcpkg

Jeśli ten błąd występuje podczas próby skonfigurowania biblioteki innej firmy w ramach kompilacji, rozważ użycie narzędzia vcpkg, menedżera pakietów języka C++, aby zainstalować i skompilować bibliotekę. Narzędzie vcpkg obsługuje dużą i rosnącą listę bibliotek innych firm oraz ustawia wszystkie właściwości konfiguracji i zależności wymagane do pomyślnego kompilowania w ramach projektu.

Zobacz też

Błędy i ostrzeżenia narzędzi konsolidatora