Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Cannot execute binary file

Sivun loppuun

Tumpelo [16.08.2006 20:09:24]

#

Rupesin tässä aloittelemaan uutta projektia, edellisestä oli aikaa jo yli kuukausi, mutta tuli heti ongelmia. Kun käännän koodin komennolla "g++ -c -o a.out code.c" ja koitan ajaa sitä koodilla "./a.out" niin tulee ilmoitus "cannot execute binary file". Mistä tämä voi oikein johtua? Kansion ja tiedostojen oikeudet on kunnossa, ja olen kokeillut kaikkia komentoja myös sudona ja vaikka mitä. En nyt enää keksi mikä voisi olla vialla, joten sanokaapa te. Tässä vielä opastava kuva (low-speed-connection-warning): http://img105.imageshack.us/img105/157/whatthehelluj5.png

Pahoittelut otsikosta, en todellakaan ole hyvä keksimään niitä.

lapm [16.08.2006 20:20:18]

#

Hmm. Ihan mielenkiinosta miksi joudut sudottamaan käännöksen?

Oletko varma että tuottamasi binääri on kunnossa? Mitä sanoo file komemento tuosta tiedostostasi?

Tumpelo [16.08.2006 20:23:32]

#

No tuon kuvan tapauksessa kokeilin sudoa huvikseni, mutta eipä se ole vaikuttanut asiaan käytänkö sudoa vai en.

Binäärin pitäisi olla kunnossa, olen sitä ennenkin käyttänyt, mutta se oli vain eri kansiossa. File sanoo: code.c: ASCII C program text

EDIT: a.out: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

Krisse7 [16.08.2006 22:21:04]

#

Eikös -c -vipstaakkeli luo vasta objektitiedoston, ei vielä suoritettavaa ohjelmaa?

A-P [16.08.2006 22:56:17]

#

Tumpelo kirjoitti:

Kun käännän koodin komennolla "g++ -c -o a.out code.c" ja koitan ajaa sitä koodilla "./a.out" niin tulee ilmoitus "cannot execute binary file". Mistä tämä voi oikein johtua?

Sinulla on mukana -c -vipu. Se tarkoittaa, että lähdekooditiedosto käännetään objektitiedostoksi. Myöhemmin voitaisiin yhdistää useampi objektitiedosto ja tarvittavat kirjatot ajettavaksi tiedostoksi. Jättämällä -c -parametrin pois kääntäjä linkittää (oikeastaan delegoi tehtävän linkkerille) käännetyn tiedoston tarvittavien kirjastojen kanssa ajokelpoiseksi tiedostoksi. Toimiva komento olisi

g++ code.c

eli et tarvitse -o -parametriakann sille g++ tuottaa oletuksena a.out-nimisen tiedoston. -o -parametria tarvitse, jos haluat, että tiedoston nimi on muuta kuin a.out.

Tumpelo [17.08.2006 09:46:49]

#

Kun en käytä -c vipua, niin kääntäjä valittaa SDL jutuista jotakin (en nyt muista mitä koska olen lukion koneella). Muistaakseni jotain linkityksestä tjsp.

Blaze [17.08.2006 10:02:33]

#

Jos SDL:ää käytät, sun pitää linkittää SDL:n objektitiedostot mukaan binääriin. Anna kääntäjälle parametri -lSDL (tuo toinen merkki siis pieni ällä, ei iso ii).

Tumpelo [17.08.2006 11:56:26]

#

Ainiin, siinähän se vika oli, en muistanut tuota -lSDL juttua. Kiitoksia avusta!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta