Błąd narzędzi konsolidatora LNK2001Linker Tools Error LNK2001

nierozpoznany symbol zewnętrzny "symbol"unresolved external symbol "symbol"

Skompilowany kod wykonuje odwołanie lub wywołanie do symbolu.The compiled code makes a reference or call to symbol. Symbol nie jest zdefiniowany w żadnych bibliotekach ani plikach obiektów przeszukanych przez konsolidator.The symbol isn't defined in any libraries or object files searched by the linker.

Ten komunikat o błędzie następuje po błędzie krytycznym LNK1120.This error message is followed by fatal error LNK1120. Aby naprawić błąd LNK1120, najpierw Napraw wszystkie błędy LNK2001 i LNK2019.To fix error LNK1120, first fix all LNK2001 and LNK2019 errors.

Istnieje wiele sposobów uzyskiwania błędów LNK2001.There are many ways to get LNK2001 errors. Wszystkie z nich obejmują odwołanie do funkcji lub zmiennej, których konsolidator nie może rozpoznać, lub znaleźć definicję dla.All of them involve a reference to a function or variable that the linker can't resolve, or find a definition for. Kompilator może określić, kiedy kod nie deklaruje symbolu, ale nie definiuje go.The compiler can identify when your code doesn't declare a symbol, but not when it doesn't define one. Dzieje się tak, ponieważ definicja może znajdować się w innym pliku lub bibliotece źródłowej.That's because the definition may be in a different source file or library. Jeśli kod odwołuje się do symbolu, ale nigdy nie jest zdefiniowany, konsolidator generuje błąd.If your code refers to a symbol, but it's never defined, the linker generates an error.

Co to jest nierozpoznany symbol zewnętrzny?What is an unresolved external symbol?

Symbol to wewnętrzna nazwa dla funkcji lub zmiennej globalnej.A symbol is the internal name for a function or global variable. Jest to forma nazwy używana lub zdefiniowana w skompilowanym pliku lub bibliotece obiektu.It's the form of the name used or defined in a compiled object file or library. Zmienna globalna jest zdefiniowana w pliku obiektu, w którym jest przypisywany magazyn.A global variable is defined in the object file where storage is allocated for it. Funkcja jest zdefiniowana w pliku obiektu, w którym jest umieszczany skompilowany kod dla treści funkcji.A function is defined in the object file where the compiled code for the function body is placed. Symbol zewnętrzny jest przywoływany w jednym pliku obiektu, ale zdefiniowany w innej bibliotece lub pliku obiektu.An external symbol is one referenced in one object file, but defined in a different library or object file. Wyeksportowany symbol jest taki, który jest udostępniany publicznie przez plik lub bibliotekę obiektów, która go definiuje.An exported symbol is one that's made publicly available by the object file or library that defines it.

Aby utworzyć aplikację lub bibliotekę DLL, każdy używany symbol musi mieć definicję.To create an application or DLL, every symbol used must have a definition. Konsolidator musi rozwiązaćlub znaleźć definicję dopasowania dla, każdy symbol zewnętrzny, do którego odwołuje się każdy plik obiektu.The linker must resolve, or find the matching definition for, every external symbol referenced by each object file. Konsolidator generuje błąd, gdy nie może rozpoznać symbolu zewnętrznego.The linker generates an error when it can't resolve an external symbol. Oznacza to, że konsolidator nie może znaleźć pasującej definicji symbolu wyeksportowanego w żadnym z połączonych plików.It means the linker couldn't find a matching exported symbol definition in any of the linked files.

Ten błąd może wystąpić:This error can occur:

  • Gdy projekt nie zawiera odwołania do biblioteki (. LIB) lub obiekt (. OBJ).When the project is missing a reference to a library (.LIB) or object (.OBJ) file. Aby rozwiązać ten problem, Dodaj odwołanie do wymaganej biblioteki lub pliku obiektu do projektu.To fix this issue, add a reference to the required library or object file to your project. Aby uzyskać więcej informacji, zobacz lib plików jako dane wejściowe konsolidatora.For more information, see lib Files as linker input.

  • Gdy projekt zawiera odwołanie do biblioteki (. LIB) lub obiekt (. OBJ) plik, który z kolei wymaga symboli z innej biblioteki.When the project has a reference to a library (.LIB) or object (.OBJ) file that in turn requires symbols from another library. Może się to zdarzyć nawet wtedy, gdy nie wywołasz funkcji, które powodują zależność.It may happen even if you don't call functions that cause the dependency. Aby rozwiązać ten problem, Dodaj odwołanie do innej biblioteki do projektu.To fix this issue, add a reference to the other library to your project. Aby uzyskać więcej informacji, zobacz temat Omówienie klasycznego modelu łączenia: Tworzenie symboli na potrzeby jazdy.For more information, see Understanding the classical model for linking: Taking symbols along for the ride.

  • Jeśli używasz opcji /NODEFAULTLIB lub /zl .If you use the /NODEFAULTLIB or /Zl options. Po określeniu tych opcji biblioteki zawierające wymagany kod nie są łączone do projektu, chyba że zostały jawnie dołączone.When you specify these options, libraries that contain required code aren't linked into the project unless you've explicitly included them. Aby rozwiązać ten problem, należy jawnie uwzględnić wszystkie biblioteki używane w wierszu polecenia linku.To fix this issue, explicitly include all the libraries you use on the link command line. Jeśli podczas korzystania z tych opcji widzisz wiele brakujących nazw funkcji biblioteki CRT lub standardowej, jawnie Uwzględnij pliki bibliotek CRT i biblioteki standardowa w łączu.If you see many missing CRT or Standard Library function names when you use these options, explicitly include the CRT and Standard Library DLLs or library files in the link.

  • W przypadku kompilowania przy użyciu opcji /CLR .If you compile using the /clr option. Brak odwołania do elementu .cctor .There may be a missing reference to .cctor. Aby uzyskać więcej informacji na temat sposobu rozwiązania tego problemu, zobacz Inicjowanie zestawów mieszanych.For more information on how to fix this issue, see Initialization of mixed assemblies.

  • W przypadku łączenia się z bibliotekami trybu wydania podczas kompilowania wersji debugowania aplikacji.If you link to the release mode libraries when building a debug version of an application. Podobnie w przypadku używania opcji /MTD lub /MDD lub definiowania _DEBUG , a następnie łączenia z bibliotekami wersji, należy oczekiwać wielu potencjalnych nierozwiązanych elementów zewnętrznych, między innymi problemami.Similarly, if you use options /MTd or /MDd or define _DEBUG and then link to the release libraries, you should expect many potential unresolved externals, among other problems. Łączenie kompilacji w trybie wydania z bibliotekami debugowania powoduje także podobne problemy.Linking a release mode build with the debug libraries also causes similar problems. Aby rozwiązać ten problem, upewnij się, że używasz bibliotek debugowania w kompilacjach do debugowania oraz w bibliotekach detalicznych w kompilacjach detalicznych.To fix this issue, make sure you use the debug libraries in your debug builds, and retail libraries in your retail builds.

  • Jeśli Twój kod odwołuje się do symbolu z jednej wersji biblioteki, ale zostanie połączona inna wersja biblioteki.If your code refers to a symbol from one library version, but you link a different version of the library. Ogólnie rzecz biorąc, nie można mieszać plików obiektów lub bibliotek, które są skompilowane dla różnych wersji kompilatora.Generally, you can't mix object files or libraries that are built for different versions of the compiler. Biblioteki dostarczane w jednej wersji mogą zawierać symbole, których nie można znaleźć w bibliotekach dołączonych do innych wersji.The libraries that ship in one version may contain symbols that can't be found in the libraries included with other versions. Aby rozwiązać ten problem, skompiluj wszystkie pliki obiektów i biblioteki z tą samą wersją kompilatora przed połączeniem ich ze sobą.To fix this issue, build all the object files and libraries with the same version of the compiler before linking them together. Aby uzyskać więcej informacji, zobacz zgodność binarna języka C++ 2015-2019.For more information, see C++ binary compatibility 2015-2019.

  • Jeśli ścieżki biblioteki są nieaktualne.If library paths are out of date. Narzędzia > opcje > projekty > okna dialogowe katalogów VC + + , w obszarze Wybieranie plików biblioteki , umożliwiają zmianę kolejności wyszukiwania biblioteki.The Tools > Options > Projects > VC++ Directories dialog, under the Library files selection, allows you to change the library search order. Folder konsolidatora w oknie dialogowym strony właściwości projektu może również zawierać ścieżki, które mogą być nieaktualne.The Linker folder in the project's Property Pages dialog box may also contain paths that could be out of date.

  • Po zainstalowaniu nowego Windows SDK (prawdopodobnie z inną lokalizacją).When a new Windows SDK is installed (perhaps to a different location). Kolejność wyszukiwania biblioteki musi zostać zaktualizowana, aby wskazywała nową lokalizację.The library search order must be updated to point to the new location. Zwykle należy umieścić ścieżkę do nowych katalogów zestawu SDK include i lib przed domyślną lokalizacją Visual C++.Normally, you should put the path to new SDK include and lib directories in front of the default Visual C++ location. Ponadto projekt zawierający osadzone ścieżki może nadal wskazywać na stare ścieżki, które są prawidłowe, ale nieaktualne.Also, a project containing embedded paths may still point to old paths that are valid, but out of date. Zaktualizuj ścieżki nowych funkcji dodanych przez nową wersję, która została zainstalowana w innej lokalizacji.Update the paths for new functionality added by the new version that's installed to a different location.

  • Jeśli kompilujesz w wierszu polecenia i utworzysz własne zmienne środowiskowe.If you build at the command line, and have created your own environment variables. Sprawdź, czy ścieżki do narzędzi, bibliotek i plików nagłówkowych przechodzą do spójnej wersji.Verify that the paths to tools, libraries, and header files go to a consistent version. Aby uzyskać więcej informacji, zobacz Ustawianie zmiennych dotyczących ścieżki i środowiska dla kompilacji z wiersza poleceniaFor more information, see Set the path and environment variables for command-line builds

Problemy z kodowaniemCoding issues

Ten błąd może być spowodowany przez:This error can be caused by:

  • Niezgodna wielkość liter w kodzie źródłowym lub pliku definicji modułu (. def).Mismatched case in your source code or module-definition (.def) file. Na przykład, jeśli nazwasz zmienną var1 w jednym pliku źródłowym C++ i spróbujesz uzyskać do niej dostęp VAR1 , tak jak w innym, ten błąd jest generowany.For example, if you name a variable var1 in one C++ source file and try to access it as VAR1 in another, this error is generated. Aby rozwiązać ten problem, użyj spójnie wpisanej nazwy i wielkości liter.To fix this issue, use consistently spelled and cased names.

  • Projekt korzystający z funkcji wykreślania.A project that uses function inlining. Może się to zdarzyć, gdy zdefiniujesz funkcje jak inline w pliku źródłowym, a nie w pliku nagłówkowym.It can occur when you define the functions as inline in a source file, rather than in a header file. Wbudowane funkcje nie mogą być widoczne poza plikiem źródłowym, który je definiuje.Inlined functions can't be seen outside the source file that defines them. Aby rozwiązać ten problem, zdefiniuj wbudowane funkcje w nagłówkach, w których są one deklarowane.To fix this issue, define the inlined functions in the headers where they're declared.

  • Wywoływanie funkcji C z programu C++ bez użycia extern "C" deklaracji dla funkcji języka c.Calling a C function from a C++ program without using an extern "C" declaration for the C function. Kompilator używa różnych wewnętrznych konwencji nazewnictwa symboli dla kodu C i C++.The compiler uses different internal symbol naming conventions for C and C++ code. Wewnętrzna nazwa symbolu to element łączący, który jest wyszukiwany podczas rozpoznawania symboli.The internal symbol name is what the linker looks for when resolving symbols. Aby rozwiązać ten problem, należy użyć extern "C" otoki wokół wszystkich deklaracji funkcji języka c używanych w kodzie języka C++, co powoduje, że kompilator używa wewnętrznej konwencji nazewnictwa c dla tych symboli.To fix this issue, use an extern "C" wrapper around all declarations of C functions used in your C++ code, which causes the compiler to use the C internal naming convention for those symbols. Opcje kompilatora /TP i /TC powodują, że kompilator kompiluje pliki odpowiednio w języku C++ lub C, niezależnie od tego, czym jest rozszerzenie nazwy pliku.Compiler options /Tp and /Tc cause the compiler to compile files as C++ or C, respectively, no matter what the filename extension is. Te opcje mogą spowodować, że wewnętrzne nazwy funkcji różnią się od oczekiwanych.These options can cause internal function names different from what you expect.

  • Próba odwołująca się do funkcji lub danych, które nie mają powiązania zewnętrznego.An attempt to reference functions or data that don't have external linkage. W języku C++ funkcje wbudowane i const dane mają połączenie wewnętrzne, chyba że są jawnie określone jako extern .In C++, inline functions and const data have internal linkage unless explicitly specified as extern. Aby rozwiązać ten problem, należy użyć jawnych extern deklaracji w odniesieniu do symboli, do których odwołuje się poza Definiowanie pliku źródłowego.To fix this issue, use explicit extern declarations on symbols referred to outside the defining source file.

  • Brakująca treść funkcji lub definicja zmiennej .A missing function body or variable definition. Ten błąd jest typowy w przypadku deklarowania, ale nie definiowania zmiennych, funkcji ani klas w kodzie.This error is common when you declare, but don't define, variables, functions, or classes in your code. Kompilator wymaga tylko prototypu funkcji lub extern deklaracji zmiennej do wygenerowania pliku obiektu bez błędu, ale konsolidator nie może rozpoznać wywołania funkcji ani odwołania do zmiennej, ponieważ nie istnieje kod funkcji ani zarezerwowane miejsce na zmiennej.The compiler only needs a function prototype or extern variable declaration to generate an object file without error, but the linker can't resolve a call to the function or a reference to the variable because there's no function code or variable space reserved. Aby rozwiązać ten problem, upewnij się, że zdefiniowano każdą przywoływaną funkcję i zmienną w połączonym pliku źródłowym lub bibliotece.To fix this issue, make sure to define every referenced function and variable in a source file or library you link.

  • Wywołanie funkcji, które używa typów zwracanych i parametrów lub konwencji wywoływania, które nie pasują do tych w definicji funkcji.A function call that uses return and parameter types or calling conventions that don't match the ones in the function definition. W plikach obiektów C++ dekoracja nazwa koduje konwencję wywoływania, zakres klasy lub przestrzeni nazw oraz zwraca i typy parametrów funkcji.In C++ object files, Name decoration encodes the calling convention, class or namespace scope, and return and parameter types of a function. Zakodowany ciąg wchodzi w skład ostatniej nazwy funkcji dekoracyjnej.The encoded string becomes part of the final decorated function name. Ta nazwa jest używana przez konsolidator do rozpoznawania lub dopasowywania wywołań funkcji z innych plików obiektów.This name is used by the linker to resolve, or match, calls to the function from other object files. Aby rozwiązać ten problem, upewnij się, że w deklaracji funkcji, definicji i wywołań wszystkie używają tych samych zakresów, typów i konwencji wywoływania.To fix this issue, make sure the function declaration, definition, and calls all use the same scopes, types, and calling conventions.

  • Kod języka C++ wywoływany, gdy dołączysz prototyp funkcji w definicji klasy, ale nie dołączysz implementacji funkcji.C++ code you call, when you include a function prototype in a class definition, but don't include the implementation of the function. Aby rozwiązać ten problem, należy podać definicję wszystkich członków klasy, które są wywoływane.To fix this issue, be sure to provide a definition for all class members you call.

  • Próba wywołania czystej funkcji wirtualnej z abstrakcyjnej klasy podstawowej.An attempt to call a pure virtual function from an abstract base class. Czysta funkcja wirtualna nie ma implementacji klasy bazowej.A pure virtual function has no base class implementation. Aby rozwiązać ten problem, upewnij się, że są zaimplementowane wszystkie wywołane funkcje wirtualne.To fix this issue, make sure all called virtual functions are implemented.

  • Próba użycia zmiennej zadeklarowanej w funkcji (zmiennej lokalnej) poza zakresem tej funkcji.Trying to use a variable declared within a function (a local variable) outside the scope of that function. Aby rozwiązać ten problem, usuń odwołanie do zmiennej, która nie znajduje się w zakresie, lub Przenieś zmienną do wyższego zakresu.To fix this issue, remove the reference to the variable that isn't in scope, or move the variable to a higher scope.

  • Podczas kompilowania wersji wydania projektu ATL, należy utworzyć komunikat, że wymagany jest kod uruchomienia CRT.When you build a Release version of an ATL project, producing a message that CRT startup code is required. Aby rozwiązać ten problem, wykonaj jedną z następujących czynności:To fix this issue, do one of the following,

    • Usuń _ATL_MIN_CRT z listy preprocesora definiuje się, aby umożliwić dołączenie kodu uruchamiania CRT.Remove _ATL_MIN_CRT from the list of preprocessor defines to allow CRT startup code to be included. Aby uzyskać więcej informacji, zobacz Ogólne strony właściwości (projekt).For more information, see General property page (Project).

    • Jeśli to możliwe, Usuń wywołania funkcji CRT, które wymagają kodu uruchomienia CRT.If possible, remove calls to CRT functions that require CRT startup code. Zamiast tego należy użyć ich odpowiedników Win32.Instead, use their Win32 equivalents. Na przykład: użyj opcji lstrcmp zamiast strcmp.For example, use lstrcmp instead of strcmp. Znane funkcje, które wymagają kodu uruchomieniowego CRT, to niektóre funkcje ciągów i zmiennoprzecinkowych.Known functions that require CRT startup code are some of the string and floating point functions.

Problemy ze spójnościąConsistency issues

Obecnie nie ma standardowej dekoracji nazw C++ między dostawcami kompilatora, a nawet między różnymi wersjami tego samego kompilatora.There's currently no standard for C++ name decoration between compiler vendors, or even between different versions of the same compiler. Pliki obiektów skompilowane z różnymi kompilatorami mogą nie używać tego samego schematu nazewnictwa.Object files compiled with different compilers may not use the same naming scheme. Łączenie ich może spowodować wystąpienie błędu LNK2001.Linking them can cause error LNK2001.

Mieszanie wbudowanych i niewbudowanych opcji kompilacji w różnych modułach może spowodować wystąpienie LNK2001.Mixing inline and non-inline compile options on different modules can cause LNK2001. Jeśli biblioteka języka C++ jest tworzona z włączonym wykreśleniem funkcji (/OB1 lub /Ob2), ale odpowiedni plik nagłówkowy opisujący funkcje ma wyłączone wyłączenie (bez inline słowa kluczowego), ten błąd wystąpi.If a C++ library is created with function inlining turned on (/Ob1 or /Ob2) but the corresponding header file describing the functions has inlining turned off (no inline keyword), this error occurs. Aby rozwiązać ten problem, zdefiniuj funkcje inline w pliku nagłówkowym, który znajduje się w innych plikach źródłowych.To fix this issue, define the functions inline in the header file you include in other source files.

Jeśli używasz #pragma inline_depth dyrektywy kompilatora, upewnij się, że ustawiono wartość 2 lub większą, i upewnij się, że użyto również opcji kompilatora /OB1 lub /Ob2 .If you use the #pragma inline_depth compiler directive, make sure you've set a value of 2 or greater, and make sure you also use the /Ob1 or /Ob2 compiler option.

Ten błąd może wystąpić, jeśli pominięto opcję łącza/NOENTRY podczas tworzenia biblioteki DLL tylko dla zasobów.This error can occur if you omit the LINK option /NOENTRY when you create a resource-only DLL. Aby rozwiązać ten problem, Dodaj opcję/NOENTRY do polecenia link.To fix this issue, add the /NOENTRY option to the link command.

Ten błąd może wystąpić, jeśli w projekcie użyto nieprawidłowych ustawień/SUBSYSTEM lub/ENTRY.This error can occur if you use incorrect /SUBSYSTEM or /ENTRY settings in your project. Przykładowo, jeśli piszesz aplikację konsolową i określisz/SUBSYSTEM: WINDOWS, generowany jest nierozpoznany błąd zewnętrzny dla WinMain .For example, if you write a console application and specify /SUBSYSTEM:WINDOWS, an unresolved external error is generated for WinMain. Aby rozwiązać ten problem, upewnij się, że opcje są zgodne z opcjami typu projektu.To fix this issue, make sure you match the options to the project type. Aby uzyskać więcej informacji na temat tych opcji i punktów wejścia, zobacz Opcje konsolidatora /Subsystem i /entry .For more information on these options and entry points, see the /SUBSYSTEM and /ENTRY linker options.

Problemy ze znakiem wyeksportowanego pliku. defExported .def file symbol issues

Ten błąd występuje, gdy nie znaleziono eksportu wymienionego w pliku. def.This error occurs when an export listed in a .def file isn't found. Może to być spowodowane faktem, że eksport nie istnieje, jest wpisany niepoprawnie lub używa nazw dekoracyjnych języka C++.It could be because the export doesn't exist, is spelled incorrectly, or uses C++ decorated names. Plik. def nie przyjmuje nazw.A .def file doesn't take decorated names. Aby rozwiązać ten problem, Usuń niepotrzebne Eksporty i Użyj extern "C" deklaracji dla eksportowanych symboli.To fix this issue, remove unneeded exports, and use extern "C" declarations for exported symbols.

Użyj nazwy dekoracyjnej, aby znaleźć błądUse the decorated name to find the error

Kompilator i konsolidator języka C++ używają dekoracji nazw, znanego również jako name-dekorowanie.The C++ compiler and linker use Name Decoration, also known as name-mangling. Dekoracja nazw koduje dodatkowe informacje o typie zmiennej w nazwie symbolu.Name decoration encodes extra information about the type of a variable in its symbol name. Nazwa symbolu funkcji koduje jej typ zwracany, typy parametrów, zakres i konwencję wywoływania.The symbol name for a function encodes its return type, parameter types, scope, and calling convention. Ta dekoracyjna nazwa jest symbolem, który wyszukuje za pomocą konsolidatora, aby rozpoznać symbole zewnętrzne.This decorated name is the symbol name the linker searches for to resolve external symbols.

Błąd łącza może wynikać, jeśli deklaracja funkcji lub zmiennej nie jest dokładnie zgodna z definicją funkcji lub zmiennej.A link error can result if the declaration of a function or variable doesn't exactly match the definition of the function or variable. Wynika to z faktu, że jakakolwiek różnica będzie częścią nazwy symbolu do dopasowania.That's because any difference becomes part of the symbol name to match. Ten błąd może wystąpić, nawet jeśli ten sam plik nagłówka jest używany zarówno w kodzie wywołującym, jak i w kodzie.The error can happen even if the same header file is used in both the calling code and the defining code. Jeden ze sposobów może wystąpić w przypadku skompilowania plików źródłowych przy użyciu różnych flag kompilatora.One way it may occur is if you compile the source files by using different compiler flags. Na przykład, jeśli kod jest kompilowany do używania __vectorcall konwencji wywoływania, ale łączysz się z biblioteką, która oczekuje, że klienci będą wywoływać ją za pomocą domyślnej __cdecl lub __fastcall konwencji wywoływania.For example, if your code is compiled to use the __vectorcall calling convention, but you link to a library that expects clients to call it using the default __cdecl or __fastcall calling convention. W takim przypadku symbole nie są zgodne, ponieważ Konwencje wywoływania są różne.In this case, the symbols don't match because the calling conventions are different.

Aby ułatwić znalezienie przyczyny problemu, komunikat o błędzie pokazuje dwie wersje nazwy.To help you find the cause, the error message shows you two versions of the name. Wyświetla zarówno "przyjazną nazwę", nazwę używaną w kodzie źródłowym i nazwę dekoracyjną (w nawiasach).It displays both the "friendly name," the name used in source code, and the decorated name (in parentheses). Nie musisz wiedzieć, jak interpretować nazwę dekoracyjną.You don't need to know how to interpret the decorated name. Nadal można wyszukać i porównać z innymi nazwami dekoracyjnymi.You can still search for and compare it with other decorated names. Narzędzia wiersza polecenia mogą pomóc znaleźć i porównać oczekiwaną nazwę symbolu i rzeczywistą nazwę symbolu:Command-line tools can help to find and compare the expected symbol name and the actual symbol name:

  • Opcje /exports i /Symbols narzędzia wiersza polecenia polecenia DUMPBIN są przydatne w tym miejscu.The /EXPORTS and /SYMBOLS options of the DUMPBIN command-line tool are useful here. Mogą one pomóc w ustaleniu, które symbole są zdefiniowane w pliku dll i plikach biblioteki.They can help you discover which symbols are defined in your .dll and object or library files. Możesz użyć listy symboli, aby sprawdzić, czy eksportowane dekoracyjne nazwy pasują do dekoracyjnych nazw, które wyszukuje konsolidator.You can use the symbols list to verify that the exported decorated names match the decorated names the linker searches for.

  • W niektórych przypadkach konsolidator może zgłosić tylko dekoracyjną nazwę symbolu.In some cases, the linker can only report the decorated name for a symbol. Możesz użyć narzędzia wiersza polecenia UNDNAME, aby uzyskać niedekoracyjną postać nazwy dekoracyjnej.You can use the UNDNAME command-line tool to get the undecorated form of a decorated name.

Zasoby dodatkoweAdditional resources

Aby uzyskać więcej informacji, zobacz pytanie Stack Overflow "co to jest błąd niezdefiniowanego odwołania/nierozpoznany symbol zewnętrzny i jak go naprawić?".For more information, see the Stack Overflow question "What is an undefined reference/unresolved external symbol error and how do I fix it?".