Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VC++ 2008 ja ohjelman levitys

Sivun loppuun

jospa [27.07.2009 23:05:47]

#

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.

groovyb [27.07.2009 23:15:17]

#

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.

jospa [27.07.2009 23:29:09]

#

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.

groovyb [28.07.2009 00:49:11]

#

pasteeppa se koodisi jonnekkin niin katsotaan

Pekka Karjalainen [28.07.2009 08:54:45]

#

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.

Gaxx [28.07.2009 09:41:54]

#

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.

jospa [28.07.2009 12:27:17]

#

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;

}

Grez [28.07.2009 12:49:30]

#

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.

Metabolix [28.07.2009 12:56:36]

#

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.

jospa [28.07.2009 16:21:08]

#

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:

http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en


Sivun alkuun

Vastaus

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

Tietoa sivustosta