Uløste ydre symbol __vsnprintf … (i dxerr.lib)?

Jeg kører en DirectX 11-program på windows 7 og visual studio fællesskab 2015 RC. Jeg er stadig brug af funktioner fra DX SDK. Det virkede fint på VS2013 men da jeg skiftede over, at jeg kun får følgende fejl:

Error   LNK2019 unresolved external symbol __vsnprintf referenced in function "long __stdcall StringVPrintfWorkerA(char *,unsigned int,unsigned int *,char const *,char *)" ([email protected]@[email protected])   Ancora  D:\Moody\Moody\Projects\Projects\Ancora\Ancora\dxerr.lib(dxerra.obj)    1

Jeg kun bruger den DXGetErrorDescriptionA funktion fra dxerr bibliotek, og når jeg kommentere det ud, programmet samler fint. Jeg har ingen idé om, hvad der er galt, men det kan ikke være fra DX SDK eller anden måde de andre funktioner vil ikke lige med det?

OriginalForfatteren Moody | 2015-06-25

7 svar

  1. 35

    Jeg har oplevet det samme problem med DXGetErrorMessage() med Dx9 og fandt ud af, at MS har givet et ekstra bibliotek til at omfatte i Additional Dependencies egenskaber side for at løse dette problem. Biblioteket navn er: legacy_stdio_definitions.lib

    At tilføje denne løst problemet for mig.

    Dette er også et gyldigt svar. Tak for input.
    Jeg stemmer for dette.Tak LaurieW. Og yderligere artikel kan findes her:msdn.microsoft.com/en-us/library/bb531344.aspx
    Dette er det bedste svar.
    Igen, tak Gud for StackOverflow. Er det for meget forlangt, at Microsoft ville nævne dette på “_vsnprintf” Web side?

    OriginalForfatteren LaurieW

  2. 20

    I stedet for at hacking dxerr.lib manuelt, kan du tilføje

    #include <Windows.h>
    #include <stdio.h>
    int (WINAPIV * __vsnprintf)(char *, size_t, const char*, va_list) = _vsnprintf;
    

    et eller andet sted i din kode

    Tak! Det virkede for mig.

    OriginalForfatteren user5477957

  3. 4

    DirectX biblioteker, du bruger, er udarbejdet med en ældre version af Visual Studio, end du bruger. Microsoft nogle gange gør ændringer til deres C runtime, at skabe uoverensstemmelser mellem bibliotekerne, som er kompileret med forskellige versioner. __vsnprintf var en intern symbol i ældre versioner af deres C-runtime, men den eksisterer ikke i 2015 RC version.

    Desværre, dxerr.lib (sammen med d3dx11.lib) har været deprecated. Du har to muligheder – du kan skifte tilbage til VS2013, eller du kan stoppe med at bruge funktionalitet fra dxerr.lib. Sidstnævnte er sandsynligvis bedre, fordi du kan kopiere sin funktionalitet ved at bruge FormatMessage nu (mere info i den linkede artikel).

    En tredje mulighed er at bygge din egen dxerr.

    OriginalForfatteren MuertoExcobito

  4. 3

    Arven DirectX SDK er ret gammel, og dxerr.lib i DXSDK er ikke kompatibel med VS ‘ s 2015 C Runtime, som du er stødt på.

    Generelt statiske biblioteker med kode i dem bland ikke godt fra forskellige versioner af compileren. Mest af .libs i arv DirectX SDK arbejde med VS 2015, fordi de er importere biblioteker for dll-filer eller alle data, biblioteker og indeholder derfor ingen kode. Den DXSDK er ikke blevet opdateret siden VS 2010.

    Sørg for at læse vejledningen på MSDN på den rigtige måde at blande arv DirectX SDK med Windows 8.x SDK anvendt af VS 2015. Du er formentlig ved hjælp af noget andet fra legacy DirectX SDK i dette projekt udover dxerr.

    Jeg har gennemført en version af DXERR, at du kan bygge fra kildekoden i dit projekt for at fjerne denne dependacy af arven DirectX SDK. Se dette indlæg for detaljer. Det sagt, har jeg med vilje kun understøttet Unicode (W version). Du kan finde ud af at gøre ANSI (A-version), som er let nok, men det bedste ville være, hvis der er opdateret din app til at bruge Unicode.

    Se Hvor er DirectX SDK (2015-Udgaven)? og DXUT for Direct3D 11.

    OPDATERING: Som nævnt i et andet svar forbinder med legacy_stdio_definitions.lib skal gøre det gamle legacy DirectX SDK version af dxerr.lib linket igen med VS 2015/2017. Det sagt, du skal arbejde på at fjerne afhængigheder på arven DirectX SDK så meget som muligt, og DXERR er nemt erstattes af dit eget modul. Se At leve uden D3DX.

    OriginalForfatteren Chuck Walbourn

  5. 2

    HACKY men du kunne lappe dxerr.lib.

    Erstatte __vsnprintf med _vsnprintf (med et nul i slutningen af hensyn til den fjernet underscore i begyndelsen)

    OriginalForfatteren cgp1024

  6. 1

    Du kan ændre Platform Værktøjssæt fra Visual Studio 2015 til Visual Studio 2013 og så det samler.
    Platformen Værktøjskasse, der er fundet på fanen Generelt i Projektet Egenskaber.

    OriginalForfatteren Raymond Trel

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *