Olen aiemmin käyttänyt GCC/Dev-C++:aa C++ ohjelmien tekoon. Nyt aloin kuitenkin mielenkiinnosta käyttämään Microsoftin Visual C++ 2008 Express Editionia, kun senkin ilmaiseksi saa ladattua.
VC++ 2008 vaikuttaa ihan OK:lta, mutta en ole oikein päässyt perille miksi sillä tekemäni ohjelmat eivät toimi toisella koneella, jossa ei ole VC++ 2008:a asennettuna. Latasin jopa Microsoftin redistribution packagen, jonka asensin toiselle koneelle mutta se ei hämmästykseni auttanut mitään.
Mikähän tähän tepsii? Pitääkö VC++:sta olla kaupallinen versio, jotta ohjelmien käyttö muissa koneissa onnistuu vai auttaisko jokin säätely "properties"-valikossa.
jos olet käyttäny .net frameworkkia niin toisessa koneessa pitää se myös luonnollisesti olla asennettuna.
itsessään nuo express editionit eivät rajoita mitenkään levitystä, microsoftilla lukee faq:issaan näistä että saa vapaasti levitellä softia jotka expresseillä on tehty.
Niin en ainakaan tietääkseni ole käyttänyt .nettiä vaan tein ihan natiivi koodia, en tosin ole perehtynyt niihin lukemattomiin valikoihin kovinkaan hyvin.
Esimerkiksi tein konsoli-ohjelman, jossa käytin cout:ia ja cin:iä jne. perusjuttuja, mutta sekään ei toiminut koneella, jossa ei ole VC++ asennettuna.
pasteeppa se koodisi jonnekkin niin katsotaan
Hae ohjelma nimeltä Dependency Walker ja tarkista, että ohjelma ei vaadi mitään erityistä DLL-tiedostoa, joka toiselta koneelta puuttuu.
http://www.dependencywalker.com/
Tätä ohjelmaa on helppo käyttää. Käynnistä se, ja avaa haluamasi exe, niin saat listan DLL-tiedoista, joihin exen sisällä on viittaus.
Tämä ei nyt välttämättä paljasta ongelmaa, koska syy voi olla muussakin kuin DLL-tiedostoissa. Mutta voipa siitä joku apu olla hyvällä tuurilla.
Jäi vähän epäselväksi, miten ohjelma ei toimi. Tuleeko virheilmoituksia? Kaatuuko ohjelma "heti alkuun"?
Mitä eroa näillä kahdella koneella on(käyttikset...)?
Menee muuten vähän tällaiseksi arvailuksi.
Ohjelma antaa virheilmoituksen:
"Sovelluksen käynnistäminen epäonnistui, koska sovelluksen kokoonpano on viallinen. Sovelluksen asentaminen uudelleen saattaa korjata ongelman."
Käyttiksenä on XP SP3.
Kokeilin tuota Dependency Walkeria ja se ilmoitti puuttuvista dll:stä (MSVCP90D.dll & MSVCR90D.dll). Kopioin ne testikoneeseen, mutta sama virheilmoitus tulee.
Laitanpas vielä tähän koodiesimerkin, jonka sovellus siis ei toimi koneella, jossa VC++ 2008:a ei ole asennettuna:
#include <iostream> using namespace std; int main(int argc, char *argv[]) { int val; cout<<"Valitse toiminto:\n\n1 = Lue tiedosto\n2 = Tallenna tiedosto\n"; cin>>val; if (val > 2 || val < 1) val = 1; switch (val) { case 1: cout<<"\nValitsit toiminnon 1.\n\n"; break; case 2: cout<<"\nValitsit toiminnon 2.\n\n"; break; } system("PAUSE"); return EXIT_SUCCESS; }
Sinänsä mielenkiintoista, että päätellen noista D:istä tuolla lopussa niin ne olis Debug-versiot kirjastoista, eli olisit kääntänyt softasi Debug-valinnalla. Kokeiles kääntää se Release-valinnalla.
jospa kirjoitti:
Kopioin ne testikoneeseen,
Eli minne? Niiden kuuluisi siis olla ohjelman ajohakemistossa tai jossain PATH-ympäristömuuttujan osoittamassa paikassa kuten Windowsin system32-hakemistossa.
Kannattaa kääntää ohjelma Release-asetuksilla, ja voit myös yrittää etsiä asetuksista jotain staattiseen linkitykseen viittaavaa vaihtoehtoa.
Nyt homma toimii. En tajunnut tosiaan tehdä release-versiota. Silti myös release-versio tarvitsee Microsoftin runtime-komponentit toimiakseen (sekin tuli testattua). Paketin saa tuolta:
Aihe on jo aika vanha, joten et voi enää vastata siihen.