LostOblivion Skrevet 19. januar 2009 Del Skrevet 19. januar 2009 (endret) Hei, Ok, så jeg har et problem når jeg skal "distribuere" programmene mine til venner. Jeg er så populær at jeg har hele to venner. Begge hadde i starten ikke .NET Framework 3.5 installert, og fikk begge feilmeldingen - This application has failed to start because the application configuration is incorrect. - når de prøvde å kjøre applikasjonen min (som forøvrig er Win32 skrevet i Visual Studio 2008). Den ene vennen min installerte .NET Framework 3.5 og da kunne han kjøre programmet mitt (jeg spurte om han kunne gjøre dette pga en annen Managed .NET app jeg hadde laget). Uansett. Dette fikset problemet både for Win32 natives og Managed .NET apps jeg sendte han, men for han andre vennen min som fortsatt ikke har .NET Framework funker hverken Managed eller native apps. Managed skjønner jeg, men hvorfor i all verden får han feilmeldingen på Win32 natives også? Burde ikke disse kjøre uansett på maskinen hans så lenge han har Windows? Evt, hva gjør jeg feil? (Er det verdt å legge ved at han bruker XP, og jeg har utviklet og kompilert i Vista?) Endret 19. januar 2009 av LostOblivion Lenke til kommentar
Giddion Skrevet 19. januar 2009 Del Skrevet 19. januar 2009 Jeg drivere ikke med .net så jeg har bare fått den feil du nevner hvis de jeg sendere programmet til ikke har "visual studio redistributable". Du kan jo prøve å med statisk linking å se om det hjelper... da vil man ikke trenger "visual studio redistributable" Lykke til Lenke til kommentar
LostOblivion Skrevet 20. januar 2009 Forfatter Del Skrevet 20. januar 2009 Statisk linking? Jeg tenkte bare på at noen ganger så får man jo tak i enkle executables (.exe) som man gjerne bare har lastet ned uten å installere noe annet. Disse kjører jo fint, er det noe spesielt jeg må gjøre for å få til dette? Evt, hva gjør jeg feil? Lenke til kommentar
Giddion Skrevet 20. januar 2009 Del Skrevet 20. januar 2009 Ditt første spørsmål er svaret på ditt andre. Vanligvis bruker visual studio dynamisk linking (bruker dll) men hvis man linker statisk så slipper man det veldig dårlig tid Prosjektconfig-C/C00 code generation->Runtime library (bruke en uten dll) Lenke til kommentar
LostOblivion Skrevet 21. januar 2009 Forfatter Del Skrevet 21. januar 2009 Nå har jeg satt Runtime Library til Multi-threaded Debug (/MTd) for Debug config og Multi-threaded Debug (/MTd) og Multi-threaded (/MT) for Release. Når jeg bygger får jeg build loggen. 1>------ Build started: Project: [...], Configuration: Debug Win32 ------ 1>Compiling... [...] 1>Generating Code... 1>Linking... 1>Embedding manifest... 1>mt.exe : general error c101008a: Failed to save the updated manifest to the file ".\Debug\[...].exe.embed.manifest". The parameter is incorrect. 1>Build log was saved at "file://[...]\Debug\BuildLog.htm" 1>[...] - 1 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Jeg visste ikke hva static og dynamic linking var...leste litt om det. Skjønner at det jeg trenger er å få VS til å inkludere dependencies/libs som appen min bruker i executablen? Lenke til kommentar
GeirGrusom Skrevet 21. januar 2009 Del Skrevet 21. januar 2009 Du setter det i hovedkategorien til C++ compileren "Link CRT as static libraries" eller noe slikt, husker ikke helt, og har ikke VS tilgjengelig her Lenke til kommentar
LostOblivion Skrevet 21. januar 2009 Forfatter Del Skrevet 21. januar 2009 Fant en løsning her, men usikker på hvilke .lib-s programmet mitt trenger. Loggen viser hvilke funksjoner jeg har brukt som den tydeligvis ikke har inkludert .lib-en til. Jeg trenger vel ikke si eksplisitt til VS hvilke .lib-s den skal bruke? Dette er jo litt teit... 1>------ Build started: Project: My2DGame, Configuration: Debug Win32 ------ 1>Compiling... 1>Engine.cpp 1>FuelTank.cpp 1>Game.cpp 1>Main.cpp 1>Vec.cpp 1>Generating Code... 1>Linking... 1>LINK : warning LNK4199: /DELAYLOAD:OleAcc.dll ignored; no imports found from OleAcc.dll 1>Game.obj : error LNK2019: unresolved external symbol __imp__SwapBuffers@4 referenced in function "public: void __thiscall Game::RenderScene(void)" (?RenderScene@Game@@QAEXXZ) 1>Main.obj : error LNK2019: unresolved external symbol __imp__DefWindowProcW@16 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 1>Main.obj : error LNK2019: unresolved external symbol __imp__PostQuitMessage@4 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 1>Main.obj : error LNK2019: unresolved external symbol __imp__DestroyWindow@4 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 1>Main.obj : error LNK2019: unresolved external symbol __imp__ShowWindow@8 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 1>Main.obj : error LNK2019: unresolved external symbol __imp__IsZoomed@4 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 1>Main.obj : error LNK2019: unresolved external symbol __imp__GetDC@4 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 1>Main.obj : error LNK2019: unresolved external symbol __imp__DispatchMessageW@4 referenced in function _WinMain@16 1>Main.obj : error LNK2019: unresolved external symbol __imp__TranslateMessage@4 referenced in function _WinMain@16 1>Main.obj : error LNK2019: unresolved external symbol __imp__PeekMessageW@20 referenced in function _WinMain@16 1>Main.obj : error LNK2019: unresolved external symbol __imp__UpdateWindow@4 referenced in function _WinMain@16 1>Main.obj : error LNK2019: unresolved external symbol __imp__CreateWindowExW@48 referenced in function _WinMain@16 1>Main.obj : error LNK2019: unresolved external symbol __imp__MessageBoxW@16 referenced in function _WinMain@16 1>Main.obj : error LNK2019: unresolved external symbol __imp__RegisterClassExW@4 referenced in function _WinMain@16 1>Main.obj : error LNK2019: unresolved external symbol __imp__LoadCursorW@8 referenced in function _WinMain@16 1>Main.obj : error LNK2019: unresolved external symbol __imp__LoadIconW@8 referenced in function _WinMain@16 1>Main.obj : error LNK2019: unresolved external symbol __imp__SetPixelFormat@12 referenced in function "void __cdecl SetupPixelFormat(struct HDC__ *)" (?SetupPixelFormat@@YAXPAUHDC__@@@Z) 1>Main.obj : error LNK2019: unresolved external symbol __imp__ChoosePixelFormat@8 referenced in function "void __cdecl SetupPixelFormat(struct HDC__ *)" (?SetupPixelFormat@@YAXPAUHDC__@@@Z) 1>LIBCMTD.lib(wwincrt0.obj) : error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup 1>C:\Users\Olai\Documents\Visual Studio 2008\Projects\My2DGame\Debug\My2DGame.exe : fatal error LNK1120: 19 unresolved externals 1>Build log was saved at "file://c:\Users\Olai\Documents\Visual Studio 2008\Projects\My2DGame\My2DGame\Debug\BuildLog.htm" 1>My2DGame - 20 error(s), 1 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Lenke til kommentar
GeirGrusom Skrevet 21. januar 2009 Del Skrevet 21. januar 2009 Det ser ut til at du bruker OpenGL, men du har klart å få med deg OpenGL32.lib, men du har startet et console program, og må enten bytte til GUI program, eller legge til user32.lib og kernel32.lib (muligens flere også) Grunnen til WinMain greia, er at du har kalt main funksjonen for "main" Denne skal se slik ut: int WINAPI WinMain(HINSTANCE instance, HINSTANCE prev_instance, LPWSTR args, int cmdshow) så kan du ha koden din inne i den. De HINSTANCE parameterne kan du bare ignorere, de er bare gyldige i win9x etter det jeg vet. Lenke til kommentar
LostOblivion Skrevet 21. januar 2009 Forfatter Del Skrevet 21. januar 2009 Det er et Win32 Project, som allerede bruker WinMain. Ikke Win32 Console Application altså... Jeg prøvde å inkludere kernel32.lib og user32.lib, som fjernet en del av feilmeldingene, bortsett fra en. Har ikke prosjektet tilgjengelig akkurat nå, så kommer tilbake til hvilken funksjon den klagde over at den ikke hadde library til. Takk for respons så langt. Lenke til kommentar
GeirGrusom Skrevet 21. januar 2009 Del Skrevet 21. januar 2009 hmmm... den skal inkludere user32 og kernel32 hvis du har vanlig GUI-program, user32 må en uansett inkludere for å kunne bruke GUI, siden det er denne .dll-en (og .exe fil) som står for det grafiske grensesnittet i windows... fnodig. Lenke til kommentar
LostOblivion Skrevet 21. januar 2009 Forfatter Del Skrevet 21. januar 2009 (endret) Ok, nå har jeg inkludert kernel32.lib og user32.lib (samt opengl32.lib, glu32.lib, og glut32.lib) under Additional Dependencies i Input katalogen i Linker katalogen. Får - 1>Linking... 1>LINK : warning LNK4199: /DELAYLOAD:OleAcc.dll ignored; no imports found from OleAcc.dll 1>Game.obj : error LNK2019: unresolved external symbol __imp__SwapBuffers@4 referenced in function "public: void __thiscall Game::RenderScene(void)" (?RenderScene@Game@@QAEXXZ) 1>Main.obj : error LNK2019: unresolved external symbol __imp__SetPixelFormat@12 referenced in function "void __cdecl SetupPixelFormat(struct HDC__ *)" (?SetupPixelFormat@@YAXPAUHDC__@@@Z) 1>Main.obj : error LNK2019: unresolved external symbol __imp__ChoosePixelFormat@8 referenced in function "void __cdecl SetupPixelFormat(struct HDC__ *)" (?SetupPixelFormat@@YAXPAUHDC__@@@Z) 1>LIBCMTD.lib(wwincrt0.obj) : error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup 1>C:\Users\Olai\Desktop\Public\Visual Studio Projects\My2DGame\Debug\My2DGame.exe : fatal error LNK1120: 4 unresolved externals Jeg finner det rart at funksjonen SwapBuffers dukker opp her siden den skal være i OpenGL32.Lib... Den klager også om _wWinMain@16. Hmmm... Er det mulig at jeg må legge med DLLs ved siden av executablen min som librariene bruker? Endret 21. januar 2009 av LostOblivion Lenke til kommentar
LostOblivion Skrevet 21. januar 2009 Forfatter Del Skrevet 21. januar 2009 Altså, jeg kan jo bare få folk til å installere VS Redist, men det blir så tungvindt når det nok skal finnes en enklere løsning her...for evt brukerne av applikasjonene. Når jeg laster ned programmer, er det viktig for meg at programmet ikke trenger å ha massevis av dependencies og at det da er min jobb som sluttbruker å finne og installere disse dependencies... Heller da at executablen er større pga statisk linkede libs. Utrolig frustrerende at det ikke finnes noen enklere løsning på dette...føles som man må "tweake" for å bare kunne vise folk noe kult tegnet i OpenGL... Lenke til kommentar
GeirGrusom Skrevet 22. januar 2009 Del Skrevet 22. januar 2009 (endret) Jeg tror swapbuffers ligger i gdi32.lib Men alle disse burde blitt automatisk inkludert dersom du valgte Windows program og ikke console program... Hvis du noensinne lurer på hvilken .lib fil du skal bruke, leter du bare funksjonen opp i MSDN, så står det helt nederst på siden Requirements Windows NT/2000: Requires Windows NT 3.5 or later. Windows 95/98: Requires Windows 95 or later. Available as a redistributable for Windows 95. Header: Declared in wingdi.h. Import Library: Use gdi32.lib. Og når det gjelder CRT: Hvis du setter det feltet jeg har valgt der slik, skal den i teorien ikke kreve noen CRT dll. Endret 22. januar 2009 av GeirGrusom Lenke til kommentar
LostOblivion Skrevet 22. januar 2009 Forfatter Del Skrevet 22. januar 2009 Når jeg startet prosjektet mitt valgte jeg Win32, Win32 Project, Empty project. Dvs, uten "precompiled header"--hva det enn er. Så jeg startet et nytt Win32 Project med Empty project uvalgt, og importerte alle filene mine og skrev dem litt om så de inkluderte precompiled header (den klagde hvis ikke ALLE filene inkluderte denne av en eller annen sinnsyk grunn...) og kompilerte fint (med vanlige settings uten statisk linking). Jeg trengte ikke en gang å si ifra om at den trengte å se i OpenGL32.Lib, GLU32.Lib, eller GLUT32.Lib, for at den skulle kompilere. Problemet er der fortsatt når den skal statisk linke ved å ha MFC satt til "Use MFC in a Static Library". Det du sa i forrige post var tydeligvis også default for Windows prosjekter siden den allerede var satt til dette. Den finner ikke kompilert programkode for de (Windows API-)funksjonene jeg benytter meg av. Jeg inkluderte så kernel32.lib og user32.lib som Additional Dependencies, og de fleste mld forsvant, men, som før, klager den også om 1>LIBCMTD.lib(wwincrt0.obj) : error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup. Tror jeg skal gi opp dette... Lenke til kommentar
LostOblivion Skrevet 22. januar 2009 Forfatter Del Skrevet 22. januar 2009 Jeg skjønner ikke helt hva som er problemet her...du kan jo prøve selv med prosjektet her om du gidder. Sender PM. -_- Lenke til kommentar
GeirGrusom Skrevet 22. januar 2009 Del Skrevet 22. januar 2009 (endret) Sender et eksempel program her for de som er interessert. Denne skal fungere uten at en trenger å installere noe, men jeg har ikke testet på andre maskiner enn min egen. TestApp.zip Sånn ser det ut på min maskin Endret 22. januar 2009 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå