[Félig megoldva] mingw 4.5.2 és boost 1.46.1 használata

 ( hanischz | 2011. június 10., péntek - 10:31 )

Üdv mindenkinek!

Windows 7 alatt szeretném használni a boost-ot mingw-vel. Az egyik lehetőségem hogy lefordítom a forrását amely elég hosszú ideig tart és ha jól emlékszem ugyanúgy előjött az a hiba mint amivel most találkoztam.

Idő spórolás miatt http://www.cogniteam.com/wiki/index.php?title=Main_Page címről sikerült előrefordított megfelelő verziójú lib-eket letölteni.

Sikeres fordítás után (egyszerű, sok helyen előforduló példaprogramokat használva) tapasztaltam hogy a lefordított program NEM csinál semmit. Kilép.

Példa forrása:

#include
#include

void hello()
{
std::cout <<
"Hello world, I'm a thread!"
<< std::endl;
}

int main(int argc, char* argv[])
{
boost::thread thrd(&hello);
thrd.join();
return 0;
}

Ezt a parancsot adtam ki:

g++ t1.cpp -llibboost_thread-mgw44-mt-1_46_1 -Lm:/boost/lib -Im:/boost

Létrejött az futtatható fájl és nem csinál semmit. Kilép. A fordítás rendben lezajlott.

Vajon miért csinálja? Mintha rosszul linkelné össze. Szerintem lefordítom magam a boost-ot forrásból, de ha jól emlékszem korábban ugyanúgy belefutottam ebbe a jelenségbe.

A boost test könyvtár használatakor a fordítás ugyanakkor rendben lezajlott és a futtatható fájl működött. Akkor kiadott parancs:

g++ times_reading.cpp test_times_reading.cpp -llibboost_unit_test_framework-mgw44-1_46_1 -Lm:/boost/lib -Im:/boost

ui.: A boost dokumentáció említi h Win alatt VC++ -al kompatibilis csak (sajnos). Mingw-vel pedig nem (és lehet szívni).

Vagy csak én nem tudok valami trükköt?
Köszi a tippeket.

Csak félmegoldás ugyan: az előre lefordított libeket nem sikerült használnom. Saját magam fordítottam a boost-ot, nem volt könnyű megtalálnom a megoldást és be kellett tennem a boost\thread\detail\config.hpp fájl elejére a #define BOOST_THREAD_USE_LIB sort.

Fordítás utasítása a forrás könyvtárban:

bjam --toolset=gcc --prefix=c:\boost link=static install

(bjam-et értelem szerűen le kellett töltenem külön.)
Így már össze linkeli a thread-et használó programot és a libeket a köv utasítással:
(átmásoltam a c:\boost-ból a megfelelő dolgokat az m:\programs\boost-ba...)
g++ -static thread_creation.cpp -Im:/Programs/boost m:\Programs\boost\lib\libboost_thread-mgw45-mt-1_46_1.a

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ugy tudom ennek nincs ertelme: -Lm:/boost/lib -Im:/boost
hibakat nem dobott a gcc?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Már miért ne lenne?

"...handing C++ to the average programmer seems roughly comparable to handing
a loaded .45 to a chimpanzee." -- Ted Ts'o

Jaohh... most kezdek belegondolkodni, hogy ez mingw... sose volt meg m betus meghajtom.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

subst-oltam :) Így alakítottam ki a munkakörnyezetemet különböző gépeken.

Elszáll vagy lefut?
Visszatérési érték?

Mostanában nem boost-oztam, de 1-2 éve még tuti ment mingw-vel, és amit az u.i.-ben írsz azt nem tudom honnan vetted, de a boost tesztelve van mind MINGW 4.4-gyel, mind 4.5.1-gyel.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

A fordítás semmilyen hibaüzenetet nem ad vissza, a futtatott program pedig szimplán kilép indítás után.

"Mostanában nem boost-oztam, de 1-2 éve még tuti ment mingw-vel, és amit az u.i.-ben írsz azt nem tudom honnan vetted, de a boost tesztelve van mind MINGW 4.4-gyel, mind 4.5.1-gyel."

http://www.boost.org/doc/libs/1_46_1/more/getting_started/windows.html#prepare-to-use-a-boost-library-binary

A note to Cygwin and MinGW users

If you plan to use your tools from the Windows command prompt, you're in the right place. If you plan to build from the Cygwin bash shell, you're actually running on a POSIX platform and should follow the instructions for getting started on Unix variants. Other command shells, such as MinGW's MSYS, are not supported—they may or may not work.

Az én tapasztalatom az, hogy az std::cout kimenete csak rxvt-s msys-szel jelenik meg a terminál ablakban. (Az msys.bat-ban van az rxvt-re egy kapcsoló, de rxvt-t installálni is kell, nem default (deprecated).)

En probaltam mar C++-os progit, es mindkettoben megjelenik.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Bocs, egy fontos dolog kimaradt: GUI-s programnál (-mwindows). Linux/Solaris/OS X esetén terminálból inditva a grafikus programot, az std::cout kimenete megjelenik a terminálban, msys-nél ugyanez csak rxvt-vel sikerült.

Lehet, hogy teljesen rossz felé tapogatózom, de szerintem amit belinkeltél, az a szöveg nem azt mondja, hogy a MinGW nem támogatott. Azt mondja, hogy a MinGW-hez szállított shell, az MSYS nem támogatott. Tehát garantáltan le tudod fordítani a MinGW-beli GCC-vel a programot, de nem biztos, hogy a fordítást vagy a futtatást el tudod végezni a MinGW-hez opcionálisan telepíthető MSYS shellben.

(szerkesztve)

Ez megint nem stimmel, az msys (igazi neven bash) shell semmi extrat nem nyujt, es nem is hianyzik belole semmi. A PATH valtozot ha jol belovi az ember, akkor olyan, mintha CMD-ben dolgozna.

Egy extra van, a windowsos progik kimenete bufferelt, vagyis csak a lefutas vegen jon ki, de olyan, hogy elhallgassa, olyan nincsen.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

A szöveg egyértelműen azt mondja, hogy a command proptból dolgozol az működik, Cygwin bash esetén úgy kell eljárni mint UNIX esetében, de msys shell alatt esetleg gondok lehetnek. Emiatt én arra gondolok, hogy az msys alatt található bizonyos értelemben hibrid (sok Linux/POSIX cucc van, pár dolog nincs, könyvtárrendszer környékén némi katyvasz) rendszer miatt a boost fordítása nem fog menni.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

A többiek hozzászólása és a dokumentáció alapján az msys esetleg bekavarhat itt-ott, szóval mi lenne, ha hagynád a francba?

A MinGW-nek nem kell, a boost-nak nem kell (akkor se ha az alatt fordítottad), szóval semmi nem akadályoz meg abban, hogy a progidat lefuttasd cmd alatt...
Ha ott megy (kéne neki), akkor máris megoldottad a problémát és indíthatsz egy új szálat (msys és cout használata) címmel... :)

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

így csináltam. Lefordítottam a boost-ot és működik. lásd a kezdő hozzászólást.