Joo, miten mahdollisesti onnistuisi exe:n kääntö omalla koodilla C++ ohjelmassa!? Es: Jos koodaa C++:saa ja kääntää sen exe:ksi omalla kääntäjällä!?
Toki kääntäjän voi tehdä C++:lla, homma vaan on sen verran hankalaa että en suosittele. Jos kuitenkin kieli on täydellisesti hallussa, tiedät millaista binäärikoodia suorittimelle pitää antaa ja sinulla on tajuttomasti aikaa, niin mikäs siinä...
Eli käytännössä ei ole mahdollista :)
Oman kääntäjän tekeminen vie asiaan perehtyneeltäkin vuosia. Sen sijaan voit käyttää mitä tahansa kääntäjää ohjelmasi sisältä esim. system-funktion avulla. Eli kirjoita käännettävän ohjelman koodi tiedostoon ofstream-olion avulla ja käännä syntynyt tiedosto kutsumalla kääntäjää system-funktiolla. Lopuksi voit vielä ajaa käännetyn ohjelman samalla system-funktiolla.
#include <iostream> #include <fstream> int main() { std::ofstream file("hello.cpp"); file << "#include <iostream>\nint main() { std::cout << \"Hello World!\\n\"; }\n"; file.close(); system("g++ hello.cpp -o hello"); system("./hello"); return 0; }
Äskeinen esimerkki oli Linuxille. Jos käytät Windowsia varmista, että GCC-kääntäjä on asennettu ja se on PATH:ssa ja vaihda rivit:
system("g++ hello.cpp -o hello"); system("./hello");
muotoon
system("g++ hello.cpp -o hello.exe"); system("hello.exe");
Edit:
Tietenkin voit imuroida GCC-kääntäjän lähdekoodin (http://gcc.gnu.org/) ja kopioida siitä tarvittavat osat ohjelmaasi, mutta edes valmiin kääntäjän modifiointi ei ole mitään helppoa ja vie kokomattomalta sekin ainakin kuukausia.
Markus kirjoitti:
Jos käytät Windowsia varmista, että GCC-kääntäjä on asennettu ja se on PATH:ssa ja vaihda rivit:
system("g++ hello.cpp -o hello"); system("./hello");muotoon
system("g++ hello.cpp -o hello.exe"); system("hello.exe");
Käytän MinGW-kääntäjää, miten sillä voi tehdä tämän?
MinGW sisältää GCC:n.
Missä PATH sitten tarkalleen ottaen sijaitsee? :)
Markus kirjoitti:
Jos käytät Windowsia varmista, että GCC-kääntäjä on asennettu ja se on PATH:ssa
Oma tietokone -> Ominaisuudet -> Lisäasetukset -> Ympäristömuuttujat -> Järjestelmämuuttujat
Lahha kirjoitti:
Oma tietokone -> Ominaisuudet -> Lisäasetukset -> Ympäristömuuttujat -> Järjestelmämuuttujat
Kuulostaa hankalalta, en edes löydä sitä tietokoneestani. Onko mahdollista ladata koodia ifstream:n avulla valmiiseen EXEen?
#include <iostream> #include <fstream> #include <string> using namespace std; int main(void){ ifstream tiedosto("cplusplus.txt"); while(!tiedosto.eof()){ // Luetaan tiedostosta koodia ohjelmaan } tiedosto.close(); return 0; }
***cplusplus.txt cout << "Terve!";
Ei ole mahdollista. Joudut tekemään oman tulkin "koodillesi".
Eli tarkoittaako se käytännössä tätä:
// luetaan koodista rivi switch(tolower(readline)) { case 'koodia1': // tee jotain break; case 'koodia2': // tee muuta break; }
Ohjelma vaan pyörii pirun hitaasti tällöin. :(
Kokeile kirjoittaa "g++" komentokehotteeseen. Jos gcc käynnistyy (eli tulostaa lyhyen viestin/käyttöohjeen esim "g++: no input files") on se jo valmiina PATH:issa. Jos saat ilmoituksen, että ohjelmaa ei löydy, seuraa tämän sivun
"http://www.computerhope.com/issues/ch000549.htm"
ohjeita ja lisää polku, josta ohjelma nimeltä "g++.exe" löytyy PATH:iin.
Voit kokeilla myös laittaa g++.exe:n polun suoraan käynnistyskomennon eteen, mutta se tuskin toimii kunnolla. Eli muuta
"system("g++ hello.cpp -o hello.exe");"
muotoon
"system("c:/polku_josta_g++.exe_löytyy/g++ hello.cpp -o hello.exe");"
Mielestäni IDE olisi paras vaihtoehto, kerta aloittelija on selvästikin kyseessä.
Itse suosittelen Visual C++ 2005 Express + Platform SDK (http://msdn.microsoft.com/vstudio/express/
Monet käyttävät myös Dev-C++:aa, joka ei mielestäni ole kuitenkaan kauhean hyvä (http://www.bloodshed.net/devcpp.html).
Näissä on koodin tekoon tarvittava editori, sekä kääntäjä mukana, joten EXE:jen teko onnistuu paria nappia painamalla.
^Ei tässä puhuttu mistään, mikä liittyisi tuohon vaan haluttiin kääntää omalla ohjelmalla koodia ja tähän ehdotettiin gcc:tä. Ei Mazzimo tainnut lukea koko aihetta! >:)
^Täytyy myöntää.. :P
Visual ja visual... Pöh, Windowsin Edit:llä ne ammattilaiset ohjelmansa koodaa...
C:>edit
Aihe on jo aika vanha, joten et voi enää vastata siihen.