Egyszer már sikerült visual studio 2022-ben egy c++ cmd programot compileolnom (egyetlen c++ (.cpp) fájl volt, githubról töltöttem le). De amiben több fájl is van, az valamiért sehogy sem akar működni. Mindenféle hibákat dobál. Hogy csináljam?
tegnapelőtt már sikerült lefordítani egyet, ezt egyetlen c++ forráskódból csináltam, 0 c++ tudással. (A \balz120src\balzcompile\balz\x64\Debug mappában található a win64 exe fájl, cmd-ből futtatható, teszteltem, minden gond nélkül csinálja, ami a dolga) [link]
Azt viszont nem értem, hogy elsőre sikerül generálnia .exe fájlt, többször nem, bármivel is próbálkozok más forráskódoknál
"Mindenféle hibákat dobál."
Írd le a hibákat és úgy talán tudunk valamit segíteni.
#12 általában vagy nem találja az exe fájlt, vagy magára a kódra ír ki hibákat. Most viszont elkészítette az .exe-t, de 1-es kóddal lépett ki, gyakorlatilag kifagyott az applikáció. Debug módban a visual studio a következő hibaüzenetet jelenítette meg: 'sst.exe' (Win32): Loaded 'C:\Users\kekma\Downloads\GDCC2023-Task4-SST\x64\Debug\sst.exe'. Symbols loaded.
'sst.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'.
'sst.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'.
'sst.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'.
'sst.exe' (Win32): Loaded 'C:\Windows\System32\vcruntime140d.dll'.
'sst.exe' (Win32): Loaded 'C:\Windows\System32\ucrtbased.dll'.
The thread 2712 has exited with code 0 (0x0).
'sst.exe' (Win32): Loaded 'C:\Windows\System32\kernel.appcore.dll'.
'sst.exe' (Win32): Loaded 'C:\Windows\System32\msvcrt.dll'.
The thread 19404 has exited with code 1 (0x1).
The thread 16652 has exited with code 1 (0x1).
The program '[7480] sst.exe' has exited with code 1 (0x1). [link] ezt próbálom lefordítani
Most lehet fújolni, köpködni, meg lepontozni, de pont ezért mondjuk sokan, hogy ehhez is kell bizonyos szakértelem. Nem kell persze hardcore C++ mágusnak lenni, de tisztában kell lenni a fordító működésével, a fordítás folyamatával, az operációs rendszer folyamatkezelésével, stb... Forrásból fordítani valamit nem egy "next-next-finish" jellegű móka, főleg, ha az alapanyag eleve problémás. Nem mondom, hogy ne találkoztam volna már olyannal, ami tényleg csont nélkül lefordult volna, de a legtöbb esetben hiányzott valami, amit vagy feltüntettek a readme-ben, vagy nem. Ha nincs jól dokumentálva, akkor meg kezdődhet a nyomozás, hogy minek milyen verzióját kell még feltenni, hogy leforduljon.
Aztán az is okozhat problémát, ha más fordítóval, vagy más verzióval dolgozunk, mint amivel a készítő dolgozott. Mert lehet, hogy neki, az ő gépén simán lefordult, de egyáltalán nem biztos, hogy a tiéden, vagy enyémen is le fog. Főleg, ha valami verzióeltérés van, ilyenkor még a legalaposabb útmutató esetén sincs garancia. Aztán jöhet a nyomozás, hogy vajon így is működésre lehet-e bírni, stb.
Ha máshoz nem, ahhoz is kell egy bizonyos szintű rutin és hozzáértés, hogy a hibaüzeneteket értelmezd, és tudj keresni rá megoldást.
A legelső probléma, hogy még normális hibaleírást sem tudtál adni. Egyetlen konkrét fordítási hibát sem mutattál. Mondogattad persze, hogy nem sikerült, nem sikerült... de hiába érdeklődtünk konkrétumokról, SEMMIT nem mondtál. Ez kicsit olyan, mint ha én laikusként vennék egy traktort, majd felhívnám a szervizest, hogy a gép nem csinálja azt, amit szeretnék. Nyilván erre megkérdezné, hogy mit mutat a műszerfal? Erre én annyit mondanék, hogy hát vannak, amik világítanak rajta. Amikor megkérdezi, hogy konkrétan mit csináltam, mit nyomtam meg, melyik pedált nyomtam le, csak annyit mondanék, hogy hát megpróbáltam beindítani, de nem ment. Hidd el, semmit nem tudna segíteni, de nem azért, mert buta lenne, hanem mert használhatatlan információkat adtam neki. Itt ugyanez a helyzet. Nem tudunk segíteni, ha egyszerűen nem tudjuk, hogy mi a hiba. Azt pedig nem vagy hajlandó elárulni, csak homályos utalásokat teszel. Így még maga Anders Hejlsberg sem tudna segíteni.
Aztán amikor hosszasan nyaggatunk, akkor meg mutatsz egy olyan példát, amiben nincs fordítási hiba. Ezzel egyrészt semmivel nem jutottunk előbbre az eredeti problémát illetően, másrészt meg egy jó példa arra, amikor mégis jól jönne, ha az ember értene némileg a programozáshoz. Ugyanis a program lefut, az 1-es kilépési kód azt jelenti, hogy a program lefutott (ergo le is fordult hibátlanul), csak nem azt tette, amit vártál. Ez innentől már programozási kérdés. Mondjuk én nem csodálkozok, hogy az ilyen Github legmélyebb bugyraiból előkotort kódok nem feltétlenül működnek. Az egy dolog, hogy a készítőnek a saját gépén működik, de semmi garancia nincs rá, hogy másnál, más fordítóval is működni fog. Komolyabb nyílt forrádkódú projekteknél nagyon komoly előírások vannak a kóddal kapcsolatban, és még így is adódhatnak problémák. Egy ilyen félreeső helyen talált, gyéren dokumentált kóddal pláne lehetnek problémák.
De amúgy... na, ez lefordult, az, hogy te nem tudod, hogy mit is fordítottál le, és hogy kell használni, az meg egy másik probléma.
15
C++ fordítás két lépésből áll (nagyon leegyszerűsítve):
1. az egyes cpp fájlok fordítása, ezekből object file lesz, ez a gépi kódja az adott cpp fájlnak (header-ből nem lesz ilyen)
2. az object fájlok linkelése, ekkor rakja őket össze futtatható fájllá.
Tippre amikor több fájlból áll a project neked a 2. lépés hiányzik.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!