Kirjoittaja |
Viesti |
Markus
| Tiistaina, 13. toukokuuta, 2003 - klo 16.40: | | Olen viimeinkin kokeillut VBCC-kääntäjää. Se kuuluisa yhden printf:n testaus on tehty, mutta ongelma tulee vastaan ohjelman kanssa, joka käyttää iff.libraryä. DICE:n kanssa ohjelma kääntyy siististi, mutta kun kirjoitan "vc ohjelma.c", niin erroria tulee jokaisen iff.libraryn funktion kohdalla viestillä "undefined reference" (esim. undefined reference to _IFFL_DecodePic). Kokeilin erästä muutakin ohjelmaa kääntää, joka käyttää ulkoista kirjastoa ja samankaltainen ongelma tuli siinäkin. Ohjelman alussa on tietenkin asianmukainen header-tiedosto sisällytetty. Avut & neuvot & selitykset otetaan mielellään vastaan.
|
Markus
| Tiistaina, 13. toukokuuta, 2003 - klo 16.42: | | Lisätään vielä, että include-path on kunnossa eli tarvittava libraries/iff.h löytyy.
|
miksuh
| Tiistaina, 13. toukokuuta, 2003 - klo 17.21: | | Hmm kääntäjä ei siis valita headeri fileen puuttumisesta tai jotain ? Itsellä mulla ei ole juuri kokemusta VBCC:stä vaikka mulla se asennettuna kyllä onkin. Äkkiseltään toi nyt kuitenkin kuulostaa siltä, että jotain jää linkkaamatta mukaan. Koska kyseessä on ongelma shared-libraryjen kanssa, niin lähinnä sanosin et funktio prototyypit määrittelevä headeri file jää nyt ottamatta mukaan. Mä en nyt ole ihan varma siitä mitä tapaa VBCC käyttää kun noiden Amigan C-kääntäjien välillä on hiukan eroja siinä miten niillä noi prototyyppi hommat hoidetaan. Siitä en olisi yllättynyt vaikka vanhan DICE:n ja VBCC:n tapa hoitaa noi olisi erilainen. Esim jos halutaan käyttää intuition.librarya niin... GCC:n kanssa pitää tehdä näin: #include #include Toinen käytetty tapa on korvata jälkimmäinen rivi tällä: #include Kannattaa tutkia noita hommeleita, jos vaikka ongelman syy löytys.
|
miksuh
| Tiistaina, 13. toukokuuta, 2003 - klo 17.26: | | jahas ja sakufoorumi iski jälleen... Se taas luuli noita html-tageiksi. mitenkähän noi pitäs kirjottaa et ne näkyisi oikein... No yritetäänpäs uudestaan: korvaann noi pienempi ja suurempikuin merkit normaali suluilla. Eli... --- Esim jos halutaan käyttää intuition.librarya niin... GCC:n kanssa pitää tehdä näin: #include (intuition/intuition.h) #include (proto/intuition.h) Toinen käytetty tapa on korvata jälkimmäinen rivi tällä: #include (clib/intuition_protos.h) Kannattaa tutkia noita hommeleita, jos vaikka ongelman syy löytys.
|
miksuh
| Tiistaina, 13. toukokuuta, 2003 - klo 18.41: | | Tossa on yksi ohje miten saa aikaan kutakuinki kaikilla kääntäjilä kääntyvän koodin. Tosin toi on vähän vanha sivu, mut... http://www.nvg.ntnu.no/amiga/amigafaq/AmigaFAQ_30.html
|
miksuh
| Tiistaina, 13. toukokuuta, 2003 - klo 18.48: | | Tää on oikeestaan parempi kun toi edellinen, tossa on käytetty tota proto/ muotoa minkä sanoin eka. http://www.lysator.liu.se/amiga/info/guide/amigafaq.guide?Pragmas
|
Jon
| Keskiviikkona, 14. toukokuuta, 2003 - klo 0.43: | | Laita Markus include-rivisi nähtäväksi, samoin kääntö- ja linkkauskäskyt.
|
itix
| Keskiviikkona, 14. toukokuuta, 2003 - klo 3.05: | | @miksuh: #include (proto/intuition.h) Tämä on oikea tapa. Se toinen tapa on huono. @markus: Selvästikin puuttuu protot, eli: #include (proto/iff.h)
|
miksuh
| Keskiviikkona, 14. toukokuuta, 2003 - klo 14.53: | | itix: Jep. Noin itsekin asian käsittäny, jostain syystä tota toistakin versiota jotkut käytää nykyäänkin...
|
Piru
| Keskiviikkona, 14. toukokuuta, 2003 - klo 15.24: | | Sen Toisen Tavan Käyttäjät ovat Väärämielisiä!
|
Markus
| Keskiviikkona, 14. toukokuuta, 2003 - klo 15.38: | | Kokeilin iff.library-paketin mukana tulevaa EasyExample.c:tä kääntää. DICE:llä kääntyy (yhtä kohtaa joutui muuttamaan), mutta VBCC:llä valitusta tulee kaikista iff.libraryn funktiokutsuista. Eli ohjelmassa on kaikki tarvittavat muut include-jutskat, sekä tämä #include (libraries/iff.h) Tuo on ainoa headertiedosto, mikä C-kieliseen ympäristöön koko iff.library-paketista tulee, ja sieltä löytyy monien määrittelyjen lisäksi protot. Otetaan tähän vaikka esimerkkinä yksi: void IFFL_CloseIFF ( IFFL_HANDLE ); Samassa tiedostossa on myös pragmat: #pragma libcall IFFBase IFFL_CloseIFF 24 901 Olen kääntäessä käyttänyt vc:tä, eli komentorivinä on ollut pelkkä vc EasyExample.c Olen kokeillut itse kääntäjälläkin: vbccm68k EasyExample.c -Ivincludem68k: Tuloksena on assembly-tiedosto EasyExample.asm Listauksessa on loppupuolella rivi, missä on mm. public _IFFL_CloseIFF sekä esim. intuition.libraryn kutsuja vastaavalla tavalla. PhxAss-assemblerilla tiedosto kääntyy ja linkitettäessä vlink-ohjelmalla valitusta ei tule muista kuin iff.libraryn funktioista, kun ottaa muutaman libin linkkauksessa mukaan, mutta nuo iff.libraryn kutsut eivät tietenkään ole standardissa amiga.lib'ssä, joten linkkeri valittaa mm. undefined reference to _IFFL_CloseIFF iff.librayn mukana tulee tiedosto iff.lib, mitä olen kokeillut tarjota linkkerille, mutta ei ole ollut apua. Samantyyppinen ongelma on tullut, kun olen kokeillut kääntää (Octa)MEDiin liittyvän developer-aineiston esimerkkisorsaa, joka käyttää medplayer.libraryä, vaikka proto-tiedosto löytyy... Mikä nyt eteen? :-/
|
Jon
| Keskiviikkona, 14. toukokuuta, 2003 - klo 16.27: | | Tyhmä kysymys, mutta avataanko IFF.library-koodissa? (entä IFFBasen määrittely?) Onko IFF:ään liittyen mitään .fd-tiedostoa, jonka avulla voisi luoda oikeantyyppiset include-tiedostot eri kääntäjille? Voin auttaa tuossa MEDin kanssa, kun oma AmiBlocks-pelini käyttää med-kirjastoja. Voin laittaa sulle sorsat siitä - Aminetissa taitaa olla joku vanhempi versio, joka ei käänny suoraan GCC:llä, mutta VBCC:llä kyllä.
|
JPQ
| Keskiviikkona, 14. toukokuuta, 2003 - klo 17.20: | | Jon: please pistä tännekkin. Täälläkin olisi med kirjasto jutulle tarvetta. Maili on tuossa JPQ linkin takana.
|
Jon
| Keskiviikkona, 14. toukokuuta, 2003 - klo 17.42: | | Malttaakaa. Pitää varmaan kokeilla että kääntykö se edes tällä hetkellä Pistän varmaan webbiin jossain vaiheessa ja kerron sitten.
|
JPQ
| Keskiviikkona, 14. toukokuuta, 2003 - klo 18.18: | | Jon: minä maltan. Ei tässä hätää ole.
|
JPQ
| Keskiviikkona, 14. toukokuuta, 2003 - klo 18.18: | | Jon: minä maltan. Ei tässä hätää ole.
|
Markus
| Keskiviikkona, 14. toukokuuta, 2003 - klo 18.54: | | Jon: Kyllä, iff.library avataan ja IFFBase määritellään. .fd-tiedosto löytyy lisäksi tuosta iff.library-paketista. Hain muuten Aminetista tuon AmiBlocks-paketin. Kokeilin kääntää sieltä löytyvää med.c:tä (otin käännäkseen mukaan proplayer.h:n, jota ei paketissa ollut), ja törmäsin tähän samaiseen ongelmaan, eli kaikista medplayer.library-kutsuista sanottiin "undefined reference", eli tämän ongelman täytyy olla ihan tässä kääntämis- ja linkittämistavassa. Näin laitoin käännösprosessin päälle: vc med.c -c -cpp-comments Tuloksena objektitiedosto jonka linkittämisen yhteydessä tulee herjaa medplayer.library-kutsuista (undefined reference). Tähän asiaan liittyen kysyisin, että minkälainen formaatti on vbcc:n makefile-tiedostolla (miksuh selitti asiaa GCC:hen liittyen aiemmin, onko samanlainen formaatti?)? Mites niitä makefilejä sitten käytetään, miten saa kääntäjän ja linkkerin seuraamaan makefilen ohjeita (en ole koskaan eläessäni omissa ohjelmissani käyttänt makefileä :-0)... Ai niin, minulla muuten ei musiikki soinut tuossa AmiBlocks-pelissä. Kun pelin aikana painoin sitä kysymysmerkki-gadgettia, ja painoin sitä "music on/off"-checkmark-gadgettia, niin koko WinUAE hävisi alta ilman mitään virheilmoituksia.
|
Jon
| Keskiviikkona, 14. toukokuuta, 2003 - klo 20.01: | | Wau Enpä olekaan itse kokeillu WinUAE:lla... No aluksi kannattaa hakea Aminetista fd2pragma-ohjelma, ja perehtyä sen käyttöohjeeseen. Siellä on myös valmiita skriptejä, joilla saa tehtyä kasan header-tiedostoja kerralla - tosin kannattaa varautua siihen, että jokin tiedosto puuttuu. Muistaakseni vaivaan auttaa jos nostaa esim. FailAt-arvon 20:een. (failat 20). Amigalla ohjelmoinnissa alkuun pääsy ei ole turhan helppoa, mutta kannattaa lukea ainakin GG:n mukana tuleva guide, VBCC:n ohjeet sekä fd2pragman ohjeet. Palaan tuohon med-asiaan kun ehdin.
|
Jon
| Keskiviikkona, 14. toukokuuta, 2003 - klo 20.01: | | ps... optio -+ tai -c99 mahdollistaa myös //-kommentit...
|
Jon
| Keskiviikkona, 14. toukokuuta, 2003 - klo 21.07: | | makefile vaatii siis make-ohjelman (Aminet esim.). VBCC:n ohjeista saa osviittaa oikeista parametreistä yms (esim. -cpu=68020). Hetkinen, onhan sinulla muuten kaikki soittokirjastot LIBSissä? Muistaakseni uusimmat löytyy (med, octamed ja octamix) löytyy SoundStudion developer-matskuista, Aminetista. Siellä on muistaakseni fd-tiedostot, joista voi fd2pragmalla luoda sopivat include-tiedostot.
|
Markus
| Keskiviikkona, 14. toukokuuta, 2003 - klo 22.20: | | Jeps, muistelinkin Linux-ajoistani, että make-ohjelmalla niitä isoja sorsakokonaisuuksia laitoin kuntoon. VBCC:n mukana tulee fd2pragma-ohjelma, katsoin, että sillä tulee juuri sen muotoista jälkeä, kuin mitä nuo iff.librayn-paketin ja med-aineiston mukana tulevat pragma-määrittely ovat (plus toisenlaista jälkeä mm. StormC:lle). libs:-hakemistossa on kaikki MEDien soittoon tarvittavat 3 libraryä. Mutta takaisin ongelmaan, kyhäsin MEDin developer-aineistosta pienen medplayer.libraryä käyttävän testiohjelman, joka näyttää seuraavalta (kutsutaan tätä nimellä "play.c": -- #include <stdio.h> #include <exec/types.h> #include <libraries/dos.h> #include <proto/exec.h> #include <proto/dos.h> /* These two must be included in this order. */ #include "myprotos.h" #include "proplayer.h" int main(int argc,char *argv[]) { struct MMD0 *sng; struct Library *MEDPlayerBase = NULL; if(argc < 2) { printf("Usage: example2 <song>\n"); return; MEDPlayerBase = OpenLibrary "medplayer.library",7); if(!MEDPlayerBase) { printf("Can't open medplayer.library!\n"); return; } sng = LoadModule(argv[1]); if(!sng) { printf("Load error."); goto exit; } PlayModule(sng); Wait(SIGBREAKF_CTRL_C); exit: FreePlayer(); UnLoadModule(sng); CloseLibrary(MEDPlayerBase); } Tuo myprotos.h näyttää tältä: -- #pragma libcall MEDPlayerBase LoadModule 48 801 #pragma libcall MEDPlayerBase FreePlayer 24 0 #pragma libcall MEDPlayerBase UnLoadModule 4e 801 #pragma libcall MEDPlayerBase PlayModule 2a 801 void PlayModule(struct MMD0 *module); void FreePlayer(void); void UnLoadModule(struct MMD0 *module); struct MMD0 *LoadModule(char *name); -- Sitten tuo proplayer.h on se developer-aineston file, jossa on mm. määritelty tuo MMD0-strukture. Kun annan komentorivillä komennon: vc -cpp-comments play.c tulee erroria jokaisesta medplayer.library-kutsusta, sekä tuosta sng-viittauksesta (undefined reference), mistään muusta ei tule erroria, muutama varoitus kylläkin. Miten tästä eteenpäin?
|
Jon
| Keskiviikkona, 14. toukokuuta, 2003 - klo 22.46: | | Joo, elin äsken testasin miten VBCC:llä käännetään/linkataan AmiBlocksin med.c tiedosto. Katso kohta "Beginners" fd2pragman guidesta ja käytä SPECIAL 70 ja 38 -optioita kuten neuvottu. Sitten inkluudat proplayer.h:n ja protot. Ilmeisesti tuossa esimerkissäsi pitäisi olla ensin proplayer.h, vasta sitten myprotos. Tässäpä esimerkiksi luotu proto/medplayer.h: (eli se ottaa clibin alta tiedoston, samoin inlinen.) #ifndef _PROTO_MEDPLAYER_H #define _PROTO_MEDPLAYER_H #ifndef EXEC_TYPES_H #include #endif #ifndef CLIB_MEDPLAYER_PROTOS_H #include #endif #ifndef __NOLIBBASE__ extern struct Library *MEDPlayerBase; #endif #ifdef __GNUC__ #include #elif defined(__VBCC__) #ifndef __PPC__ #include #endif #else #include #endif #endif /* _PROTO_MEDPLAYER_H */
|
Jon
| Keskiviikkona, 14. toukokuuta, 2003 - klo 22.51: | | Noniin, selain/foorumi teki temput ja otti kaikki -merkit pois. Laita Markus sähköpostiosoite niin laitan sulle vaikka nuo headerit tulee henk. koht. En tiedä saako niitä levitellä miten julkisesti, vaikka enpä usko että TeijoK tai RBF hyökkää kimppuun
|
Markus
| Keskiviikkona, 14. toukokuuta, 2003 - klo 23.48: | | Jeps, tuonne nimen alla olevaan sähköpostiosoitteeseen voi lähettää.
|
Markus
| Torstaina, 15. toukokuuta, 2003 - klo 0.21: | | Tuossa itse kikkailin header-tiedostojen kanssa, ja homma eteni siihen asti, että vc -cpp-comments play.c antaa erroriksi enää "undefined reference to _sng". Edistystä...
|
Markus
| Torstaina, 15. toukokuuta, 2003 - klo 1.19: | | Köh, minulla oli jostain syystä tuossa play.c-tuotoksessani "extern" tuossa alussa ennen "struct MMD0 *sng;"-kohtaa, ja sen vuoksi tuli tuo mainittu errori. Nyt saan tuotoksen kääntymään ilman erroria, mutta ohjelman ladattua kappaleen mitään ei kuulu. Yllä oleva ohjelma muuten kysyy medplayer.librarystä versiota 7, mutta huomasin, että minulla on vain vesrio 5, enkä äkksieltään löytänyt Aminetista uudempaa, joten muutin tuon versiovaatimuksen viideksi...
|
Markus
| Torstaina, 15. toukokuuta, 2003 - klo 1.38: | | Ohjelmastahan tietysti puuttui GetPlayer()-rutiinin kutsu, lisäsin sen, muttei auttanut... Mutta nyt kyllä jo väsyttää liikaa...
|
Jon
| Torstaina, 15. toukokuuta, 2003 - klo 8.34: | | Laitoin sulle ja JPQ:lle includet postissa. Ne toimii todennäköisesti vain VBCC:llä, koska siihen käyttöön ne on tarkoitettu. Eli lisäsit GetPlayer():n, eikä anna mitään virheilmoituksia? Hmmm. Ja olet varma että laite soittaa MED-musa, esim. HippoPlayer?
|
Jon
| Torstaina, 15. toukokuuta, 2003 - klo 8.36: | | Hmmm...eikö tuo "extern"-määrite tarkoita, että muuttuja on määritelty jossain muualla, ja että se ikäänkuin otetaan käyttöön ko. kääntöyksikössä sen avulla.
|
Markus
| Torstaina, 15. toukokuuta, 2003 - klo 12.38: | | Olen pikaisesti kokeillut tuota tuotostani uudestaan, ja nyt se toimi! Eilen oli kyllä aika spooky hommaa tuo "koodaminen". Nimittäin monta kertaa oli niin, että kun tekstieditorissa asiat olivat tavalla A ja talletin tekstin, niin multiviewillä katsoessani samaa tekstiä asiat olivat tavalla B (savettamisen tulos ei näkynyt). Liekkö jotain WinUAE:n bugeja vai mitä... Tänään mitä kerkesin katsomaan, niin tilanne oli se, että GetPlayer-rutiini oli sorsassa kommenteissa! Ei ihme, että ei musiikki kuulunut. Outoa, olin kai liian väsynyt tai jotain... Tuo extern on käytössä example1.c:ssä niissä MEDin developer-sorsissa. Tuossa ei käytetä libraryä, vaan linkitetään alunperin käännetyt asemblykoodit mukaan.
|
tomppa
| Torstaina, 15. toukokuuta, 2003 - klo 15.18: | | Omien kokemusteni mukaan WinUAE saattaa häröillä talletusten kanssa välillä, ainakin winukan filesysteemiä käytettäessä. Varmuuden vuoksi kannattanee heittää ainakin kriittiset tiedostot hardfileille, olen käsittänyt että ompi turvallisempi.
|
Markus
| Torstaina, 15. toukokuuta, 2003 - klo 18.35: | | VBCC:n vlink-linkkerin käytön kun vielä hallitsisi... Eli tämä alunperin assembly-koodia olevien objektitiedostojen linkkaaminen mukaan C-kieliseen ohjelmaan... (Konekieliseen ohjelmaan MEDin rutiinien linkkaaminen onnistuu kivuttomasti vanhalla blink-linkkerillä (tokihan omaan konekieliseen koodin voi toisaalta sisällyttää vaikka koko playroutinen))... Esimerkkinä tämä MEDin developer-aineiston example1.c: -- #include (exec/types.h) #include (libraries/dos.h) #include (proto/exec.h) #include (proplayer.h) /* Use symbol name 'song' when using Objconv, or change this. */ extern struct MMD0 far song; void main() /* this can be linked without c.o */ { RelocModule(&song); InitPlayer(); PlayModule(&song); Wait(SIGBREAKF_CTRL_C); RemPlayer(); } -- Eli kun minulla example1.o ja tarvittavat 3 objektitiedostoa (reloc.o, proplayer.o (tätä ei mainittu example1.c:n kommenteissa, mutta luonnollisesti sen on oltava mukana) ja module.o (soitettava moduuli objektitiedostoksi muutettuna objconv-ohjelmalla)) + amiga.lib, vc.lib ja startup.o ja linkkaan nämä kaikki vlinkillä, tulee kyllä tuloksena ajettava tiedosto, mutta se vain sekoittaa systeemin. :-/
|
Jon
| Torstaina, 15. toukokuuta, 2003 - klo 18.51: | | En tiedä mitään noista konekielisistä jutuista, mutta voiskohan ne assemblysorsat kääntää uudestaan esim Ph???-mikäseassemblernytolikaan ja yrittää sitten linkata. Oispa mahtavaa kun joku porttais med-soittorutiinit (kaikki 3) C:lle. Ilmeisesti SoundStudion nykyisellä kehittäjällä tämä nakki onkin.
|
Markus
| Torstaina, 15. toukokuuta, 2003 - klo 19.14: | | Jep, eli olen kääntänyt reloc.a:n ja proplayer.a:n (tästä täytyi muistaakseni ainakin yksi kaksoispistekommentti korjata puolipistekommentiksi, joissakin vahoissa proplayer.a-sorsissa täytyy lisätä "even" muutamaan paikkaan) molemmat objektitiedostoiksi ja nämä pitäisi laittaa kyytipoikina example1.o:n kanssa. Olen kokeillut vanhalla blink-linkkkerillä example1.c:n kommenteissa olevien ohjeiden mukaan blink from lib:c.o+example1.o+module.o+reloc.o to example1 lib lib:lc.lib+lib:amiga.lib nd sc sd linkittää lisäten tuonne proplayer.o:n ja ottamalla c.o:n pois (laitoin startup.o:n tilalle), ja noiden lib-tiedostojen paikalle laitoin vlibm68k:amiga.lib:n ja vlibm68k:vc.lib:n. Mutta ei toimi. vlinkillä tosiaan ajettava tulee, mutta jumiuttaa systeemin... :-/
|
Jon
| Torstaina, 15. toukokuuta, 2003 - klo 22.48: | | Markus, laita varulta se exe sähköpostiosoitteeseeni (tuolla ylempänä jossain), niin voihan sitä piruuttaan kokeilla ihan oikeallakin Amigalla.
|
Markus
| Perjantaina, 16. toukokuuta, 2003 - klo 15.28: | | Siirsin PC:ltä omalle aidolle Amigalle ja käynnistin: Ei toiminut. Mutta täytyyhän täällä foorumilla joku olla, joka osaa tuon linkittämisen tehdä. Eli kerrataan nyt, että tässä on example1.o, reloc.o, proplayer.o, module.o Näistä pitäisi saada ajettava ohjelma example1, joka käyttää reloc.o:ssa ja proplayer.o:ssa olevia rutiineita ja soittaa tuota module.o:ssa olevaa objektitiedostoksi muutettua modulea. Näiden mukaan olen linkittänyt v´libm68k:-hakemistosta amiga.lib, vc.lib ja startup.o-tiedostot.
|
Markus
| Perjantaina, 16. toukokuuta, 2003 - klo 15.29: | | Korjataan tuosta ylempää, että siis vlibm68k:-hakemistosta.
|
itix
| Lauantaina, 17. toukokuuta, 2003 - klo 1.51: | | Voisihan olla että siellä on jossain virhe? Ei muuta kuin printf() kutsuja koodin sekaan.. ;)
|
Markus
| Perjantaina, 13. kesäkuuta, 2003 - klo 14.12: | | ...pitkästä aikaa taas tekemässä näitä olennaisia asioita... Tein konekielisen pikku ohjelman, johon linkitettiin nuo samat reloc.o, proplayer.o ja module.o tiedostot. Toimi. Ohjelma on suora konekielinen versio tuosta yo. C-kielisestä ohjelmasta. Eli tällä perusteella näyttäisi, että ongelma tuon C-kielisen ohjelman kanssa, johon linkittämällä liitetään nuo käytettävät rutiinit ja moduuli, on nimenomaan tuossa linkittämisessä (rutiinit ovat siis ok). Tämän kyllä pitäisi olla ihan perusasioita, mutta enpä koskaan tainut mistään lukea kunnolla näistä perusasioista Amiga-ympäristössä(kään)... (Tuo proto-systeemikin oli minulle uusi asia. Aiemmin kuvittelin, että homma on ok, jos libraries/iff.h-tiedosto sisältää nuo prototiedoston jutskat...) Onneksi kuitenkin tuo MED-musiikkien soittaminen libraryä käyttäen on hanskassa...
|
Anu Seilonen
| Keskiviikkona, 17. tammikuuta, 2007 - klo 19.21: | | Suljettu spammin vuoksi.
|
|