Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: mingwm10.dll ja libgcc_s_dw2-1.dll

Sivun loppuun

vesikuusi [19.07.2011 00:38:44]

#

Juu eli asensin tuossa Qt SDK:n ja kääntämisen jälkeen kun yritän ohjelmaa ajaa niin valittaa että noi otsikon dll-tiedostot puuttu koneesta, vaikka ovat siellä C:\QtSDK\mingw\bin -kansiossa. Goooooglasin tässä pari tuntia ja oon lisännyt tämmösen flagin sinne kääntäjän asetuksiin:
-static-libgcc -static-libstdc++
Mutta ei auta. Kokeilin myös ladata netistä nuo dll:t ja laitoin ne system32-kansioon, niin virheilmoitus hävisi, mutta ohjelma ei kuitenkaan tehnyt yhtään mitään. Poistin ne netistä ladatut dll:t sieltä sitten, tottakai :D Eli miten ootte putkalaiset saaneet QtSDK:lla tekemänne ohjelmat pyörimään? Ainiin, asennuksessa tapahtui joku virhe liittyen jotenkin Visual Studioon, en tiedä siitä sitten..

The Alchemist [19.07.2011 09:07:17]

#

Miksi lataat sekalaisia filuja netistä, kun ne on jo sinulla koneellasi? Kopioi Qt:n hakemistosta kyseiset tiedostot ohjelmasi hakemistoon. Qt Creator tuntuu tämän osalta olevan rikki; en itsekään saa koskaan ajettua ohjelmiani suoraan nappia painamalla.

Pekka Karjalainen [19.07.2011 09:21:27]

#

Aikanaan laitoin Windows XP-koneessa tarvittujen dll-tiedostojen hakemistot aina PATH-muuttujaan. Tai en aina, koska niistä piti joskus olla eri versioita käytössä, joten silloin tietenkin piti sählätä dll-helvetissä ja tehdä ohjelmakohtaisia asetuksia. Yleensä tämä polkuun lisääminen kuitenkin toimi kunnolla ja säästi vaivaa.

Vesikuusi, muuten, ei millään pahalla, mutta niin kauan kun et voi kertoa, missä ympäristössä ohjelmasi tekee jotakin, meidän on paras olettaa, että on ihan oma vikasi ettei se "tee yhtään mitään." Syytä ei kannata etsiä ympäristöstä, ennen kuin on täysin selvää, ettei se ole sinun koodissasi. Kääntäjän tai käyttiksen syyttäminen on jotakin, mikä pitää perustella ihan oikealla näytöllä. (Tarkoitan todisteita, en monitoria.)

vesikuusi [19.07.2011 15:45:32]

#

Kyseessä on ihan tavallinen hello-world-esimerkki:

#include <iostream>

int main()
{
    std::cout <<"Hello, World!" <<std::endl;
    std::cin.get();
    return 0;
}

En halua leikkiä path-muuttujan kanssa enkä kopioda dll-tiedostoja eri paikkoihin, koska haluan ohjelmieni toimivan muillakin koneilla. Pidänkin enemmän Linuxista, Windows kun ei ole vieläkään toipunut kunnolla siitä dll-helvetistään..

Niin ja netistä latasin nuo dll:t silloin, kun en vielä tiennyt, että ne jo ovat koneellani.

Pekka Karjalainen [19.07.2011 16:23:13]

#

Oman koneen polkuasetukset ja ohjelmien levitys ovat tietenkin ihan eri asioita. Jälkimäisessä tapauksessa kannattaa rakentaa levityspaketti, jossa on kaikki tarvittavat lisätiedostot mukana. Sitä voi sitten testata siinä vaiheessa, kun oman ohjelman levitys on aiheellista. Tämä testaus kannattaa tehdä ihan eri koneella, vaikkapa ns. puhtaalla asennuksella jos mahdollista.

On olemassa työkaluja, jotka kertovat mitä dll-tiedostoja jokin exe haluaa käyttää. Sekin on avuksi tässä vaiheessa.

Polkuasetukset ovat taas käteviä omalla koneella kehitysvaiheessa, sekä omien ohjelmien ajoa varten yleensäkin. Pakko niiden dll-tiedostoja tarvitsevien ohjelmien on dll:nsä saada jollakin keinolla käyttöön, ja polusta haku nyt vain oli minusta hyvä tapa tehdä asiat.

Mutta jos pidät Linuxista enemmän, kehitä sitten C++-ohjelmasi sillä! Voit sitten tapella Windowsin kanssa, kun haluat levittää jotakin valmista tekemääsi ohjelmaa eri alustoilla. :)

Hello Worldisi kyllä on ihan kunnon ohjelma, ja uskon nyt ettei vika ole koodissasi. Yrititkö vielä hakea sen suoritettavan tiedoston ja ajaa sen komentoriviltä? Silloin luulisi ainakin komentotulkkiin tulevan jonkin virheen, jos ajo ei onnistu. Sitä Googlaamalla sitten selvinnee, missä vika. (En varmaankaan osaa tästä enempää sanoa, sait virheilmoituksen ulos koneesta tai et. Yksi mahdollisuus vialle on tietenkin se, että käytät eri kääntäjällä käännettyä C++-dll-tiedostoa, joka ei toimi. C++-kielessä ei ole standardi-ABIa, mikäk tarkoittaa mm. sitä, että kaikki dll:t eivät ole yhteensopivia kaikkien kääntäjien kanssa.)

The Alchemist [19.07.2011 16:40:33]

#

Jos haluaa yhden yksittäisen binääritiedoston, niin Qt itse pitää ensin kääntää staattiseksi. Staattinen Qt toisaalta asettaa tiettyjä rajoituksia ohjelmaan, joten varmaan haluaisit ensin ottaa asioista selvää ja vasta sitten alkaa säheltää.

vesikuusi [19.07.2011 18:57:14]

#

on komentoriviltä kanssa ajettu, ohjelma ei tee mitään. ja joo, Linukalla ohjelmani olen aina kehittänyt, mutta olisihan ne kiva saada Windowsissakin toimimaan :D ja kiitos vastauksistanne :)

The Alchemist [19.07.2011 19:16:58]

#

Kopioi ne filut sinne binäärin hakemistoon ja alkaa toimia. Miksi ei voi tehdä asioita oikein ja yksinkertaisesti?

vesikuusi [19.07.2011 19:24:14]

#

voin toki, mietin vaan, että olisiko parempaa ratkaisua..eipä taida siis olla.

Pekka Karjalainen [20.07.2011 10:15:34]

#

Jos C++-ohjelmien ajaminen ei onnistu edes omalla koneella, ei se onnistu muillakaan koneilla. Tässä on kaksi vaihtoehtoa. Opettele asiat kunnolla, että tiedät miksi ohjelma ei käynnisty ja korjaa sitten ongelma. Täältä et hyviä neuvoja saa, jos et edes kerro miten yrität sitä ajaa. "Ohjelma ei tee mitään" ei ole aivan tarkka kuvaus.

Jos et taas halua opetella C++:n käytännön käyttöä, vaihda kieltä. Java kuulemma toimii helpommin useilla alustoilla. Isot pojat ovat näin kertoneet.

No, Googlasin vähän itsekin aiheesta, ja tällainen Stack Overflow -sivuston kysymys tuli vastaan. Olisihan se pitänyt muistaa, että Qt:ssa on erikseen debug- ja release-kirjastot, joita ei tietenkään myös saa sekoittaa keskenään.

http://stackoverflow.com/questions/1947229/how-to-deploy-my-application-using-qt-creator

Jos tuolla annetut neuvot eivät auta, sitten ei voi mitään, kun ohjelma ei tee mitään. Muista vain se J:llä alkava vaihtoehto...

vesikuusi [20.07.2011 14:44:34]

#

unohdan qt sdk:n ja kehitän ohjelmat linukalla, windowsille käännän Dev-Cpp:llä, niin se anakin toimii.

Metabolix [23.07.2011 14:26:22]

#

Windows-versionkin voi kääntää Linuxissa. Kääntäjä löytyy monissa jakeluissa paketinhallinnasta hakusanalla mingw32. Lisäksi tarvitaan MinGW-versiot kirjastoista. Osa voi löytyä paketinhallinnasta ja loput voi kääntää itse, yrittää purkaa DevPak-tiedostoista tai etsiä muualta netistä.

vesikuusi [23.07.2011 15:09:21]

#

Kiitti Metabolix, hyvä tietää :) Oonkin joskus asentanut mingw32:n synapticista hakemalla, mutta homma tyssäsi siihen, etten oikeen ymmärtänyt, miten se toimii :D


Sivun alkuun

Vastaus

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

Tietoa sivustosta