Archyvas

Įrašai, pažymėti ‘CodeBlocks’

Qt VS CodeBlocks arba ‘kaip aš kūriau tinklų serverio programą’ II-oji dalis

2010.10.05 Xamas Komentarų: 2

Kadangi dažnai vadovaujuosi požiūriu(’share it!’), t.y. jeigu kažką žinai, kas gali būti naudinga kitiems, ir nepakenks tau pačiam, tuo pasidalink, tai va, truputi įvykių.

Visų pirma, tik perėjęs CGI -> HTML >~~> Pascal -> Php >~~> Pascal -> ASM -> C -> C++ -> Java -> C# -> Python >~~> Java -> C++ galiu pasakyti, kad C++ programavimas C++ (aš net nekalbu apie C) yra labai labai užknisantis, ir maždaug 2-3 kartus sudėtingesnis ir mažiau patogus nei netgi tokia kalba kaip Java. O pati java ir tokie toolsai kaip NetBeans dar nežinia kada prilygs tokiems toolsams kaip Visual Studio ir C# kalbai. Ir daugiausiai problemų atsiranda su C++ kalba tada, kaip prisireikia DEBUGGINIMO, GUI bei SOCKET”ų… Siaubizmas…

Taigi, mano idėja buvo tokia – paimti Java savo parašyti programą ir padaryti portą į C++.

Tokius dalykus jau yra tekę daryti – Php HipHop’e Php kodą keičiau į C++, C++ kodą į Php, pasiėmęs Java programą ją perrašinėjau Jython’ui (Python on Java), o Java programą perrašinėjau C#.

Ir galiu pasakyti, kad padaryti portą Java -> C++ buvo kol kas pati sudėtingiausia užduotis. Koks durnas yra C++ kodas kartais net keista.

Pvz. jeigu norite statinio metodo, tai headeryje rašote žodį static prieš metodo prototipą, o realizacijoje jau nebeįmanoma. Dar laimei kad yra toks dalykas kaip #include <vector>.

Tai va, pirmiausia Qt prieš mėnesį rašytame blogo įraše išvis išbrokavau kaip įrankį. Su Qt yra tekę susidurti ir prieš 3 mėnesius ir prieš pusmetį, vienam kursiokui darant operacinės sistemos projektą. Ir visus kartus aš Qt išbrokavau.

Bet pasirodo Qt buvo mano problemos vienas iš būtinų realizacinių sprendimų. O taip yra todėl, kad jis turi tikrai neblogą ‘debug’ą kodo rašymo (ne kompiliavimo metu). Jeigu CodeBlocks leidžia atidaryti Java projektą su *.cpp galunėmis ir nuėmus import, praktiškai pripažystą kaip VALID kodą. Todėl teko tą projektą atsidaryti su Qt programa, kuri mane būtent ir išgelbėjo. Pavyko paruošti pakankamai neblogą PORTą iš Java į C++. Tačiau kai ištaisiau dar vėliau kompiliavimo metu rastas klaidas, vėl susidūriau su Qt prastumu. Nepaisant prasto IDE, debugeris su “collect2: returned -1″ ir labai dideliu nenoru su SOCKET LIB’ais vėl išsekino mano kantrybės taurę. Todėl, viską ką buvau padaręs, persikėliau į CodeBlocks – IDE tūlsą su labai puikiu Debugeriu(kaip C++ kalbai), patogiu IDE, bei suknistu GUI kūrimu ir probleminių, ne kompiliavimo metu, klaidų radimu.

Na o Code::Blocks su Socketais dirba puikiai.

Jeigu yra nežinančių, kaip naudotis Echo Serveriu, tai atsakysiu:
1. Winsock 2 (libws2_32.a ) >>>>(daug geriau)>>>> Winsock I (libwsock32.a )
(T.y. Wsock2 yra FULL BACKWARDS COMPATIBLE su Wsock, ir turi naujų funkcijų, todėl geriau naudoti Wsock2.)

2. Taigi susikuriame ‘C++ Console Application’ projektą.

3. Tada ant projekto spaudžiame dešinį klavišą -> “Properties…

4. Project settings kortelėle spaudžiame mygtuką “project’s build options…”

5. Atsidariusiame lange spaudžiame ant kortelės “linker settings

6.Link libraries:” bloke apačioje spaudžiame mygtuką “add

7. Per [browse...] susirandame failą:

C:/MinGW/lib/libws2_32.a

arba (jeigu instaliavote MinGW kartu su CodeBlocks, nors, mano nuomone, tai blogas sprendimas, jeigu kaip ir aš naudojate kelis C++ IDE, o norite projektus mėtyti tarp vieno į IDE į kitą ir norite taupyti vietą) 

C:/Program Files(x86)/CodeBlocks 10.05/MinGW/lib/libws2_32.a

8. Pridedame tą patį prie Debug ir prie Release.

9. Dabar mūsų serverį reikės paleisti per kažkokį tai portą, geriausiai virš 10000, ir nenaudokite 80 (IE), 8080 (TFS, PostgreSQL, Skype, WAMP), 8000 (Python+Django server), nes neveiks. Taigi, spaudžiame:
Meniu -> Project -> Set programs’ arguments…

10. Prie debug ir release pridedame dalyje “programs arguments:”, pvz. “10999″, t.y. Jūsų serverio porto numerį.

11. Viską išsaugome. Susikeliate C++ Example Echo server aplikaciją, tik visur header failuose padarome pakeitimus:

Kodą:

#include "winsock.h"

keičiame į:

#include "WinSock2.h"

Beje, Visual Studio ir Visual C++ irgi turi savo alternatyvą, tačiau man daug paprasčiau viską padaryti pavyko būtent ne su Visual C++, o su Code::Blocks.

Visual C++ ketinu naudoti tik tuomet, jeigu nepavyks kliento(ne serverio) programos sukurti naudojant GUI per Qt. Visual C++ ir Visual Studio GUI Jus gana smarkiai pririš prie Windows’ų, tuo tarpu Netbeans ir Swing, Qt ir Qt GUI, bei Code::Blocks ir WxWidgets (kuris man taip niekad ir nesusikompiliavo) yra platform-independent.

Pastaba: Qt projetų GUI buvo atsisakęs kompiliuoti vien dėl to, kad Windows 7 buvau paredagavęs ‘environment variables’ ir prie PATH pridėjęs MinGW kelią. Jis turi būti application-controled, o ne iš Windows’ų nustatomas. Šį dalyką buvau padaręs, nes to reikalavo WxWidgets, bet taip ir pamiršęs buvau nuimti, o WxWidgets kaip neveikė, taip ir neveikė.

Pastaba 2: C++ echo serverio pilno kodo pavyzdžių nebus, nes yra toks saitas:

http://www.justfuckinggoogleit.com/

C++ kūrėjų IDE: Code:Blocks Vs Qt

2010.10.01 Xamas Komentarų: 0

Nors kartą nuo Qt, jau buvau nusisukęs, bet gavau rimtų argumentų, trumpam grįžti vėl. Tie argumentai – neva gerai veikiantis C++ GUI builder.

Nelaimei, rezultate nieko gero taip iki šiol ir nesigavo. Laimei, pirmiau išbandžiau šį dalyką su laptopu ir jame esančiais 32 bitų windows 7′aisiais. Ten bent jau example projektai veikė.

Windows 7 x64 atveju kuriant “Qt C++ GUI” projektą susidūriau su analogiškomis problemomis kaip ir ”Code::Blocks C++ wxWidgets GUI” atveju:

Build issues: CreateProcess: No such file or directory
Compile output: When executing build step ‘Make’
 

O dar bjauresnis dalykas yra tas, kad klausdamas visagalio “GŪGLO”, gaudavau siūlymą problemos ieškoti šiame bloge… Kitaip tariant, gūglas aiškaus atsakymo taip pat nežino.

O dabar truputi užstumsiu ant Qt ide:
1) Jau trejetą metų nemačiau tokio bajerio, kad visokius makefile’ų papildymus, reikalingus build papildomus LIB’us reiktų įrašinėti per text editorių į projekto tekstinį failą… T.y. Qt neegzistuoja tokia funkcija kaip “add library”, kuri yra visur kitur – Visual Studio, CodeBlocks, NetBeans ir t.t.
2) Ta programa – Qt – griozdiška. Užima bene 2GB tačiau taip ir nesupratau, ko ten pridėta, kad kas būtų reikalinga. Matyt didžiąją dalį svorio sudaro įranga skirta tik mobiliems telefonams skirtų programų kūrimui. Pastebėjimui – CodeBlocks instaliuotas užima vos kelis šimtus MB.
3) Ši programa iš pradžių pasiūlo tik vieną kompiliatorių, jo keitimas pakankamai sudėtingas, kai tuo tarpu CodeBlocks yra bent 20 kompiliatorių sąrašas.
4) Qt projektai NEVEIKIA perkėlus iš vieno PC į kitą, NetBeans, CodeBlocks ir t.t. be problemų projektus mėtau tarp kompiuterių. Problema ta, kad Qt dėl tik jam pačiam suprantamų savybių, naudoja ‘absolute path’. Todėl reikia naudotis Replace all funkcijomis.
5) Qt ide yra labai nepatogus, susigaudyti jame sunku, vaikščioti tarp failų – taip pat.
6) Qt išbandžiau dėl to, kad čia turėjo gerai kompiliuotis GUI projektai – bet taip nė velnio nėra.
7) Man nepatinka Qt debugeris – labai nepatogus, man nepatinka kompiliavimas – jis labai neaiškus, klaidos ieškoti turi pats, o ne tave prie jos numeta, kaip yra kituose IDE.
8 ) Qt projektai gali būti tik tame pačiame diske, tik C:\Qt\2010.05\qt\ direktorijoje.
9) Qt gali būti instaliuotas tik į “no space” direktoriją, t.y. neįmesiu aš jo ten, kur esu pratęs, t.y. C:\Program Files(x86)\… Po to taip ir užmiršti kelių bitų yra ta Qt programa – 32 ar 64.
10) Qt nepalaiko CTRL+D metodo(‘duplicate line’), codeblocks – palaiko.

Iš Qt pliusų – tai kol kas tik vienas. C++ Gui drag’n drop kūrimas gana patogus, tačiau pvz. Code::Blocks priskirti BackgroundColor – reikia vieno žingsio, čia reikia bene 5 žingsnių.

Reziumė paprasta – Qt trumpam pabandžiau dėl to, kad tikėjausi pakurti Qt GUI projektą. Bet, deja, toli gražu iki to, su Windows 7 x64 sistema.

Kategorijos: programavimas Žymos: , ,

Pastrigau, Windows 7 + wxWidgets + MinGW + wxSmith

2010.09.21 Xamas Komentarų: 3

Iš seno nupušusio arklio ‘ferrari’ nesukursi. Nesvarbu, koks bebūtų tobulas Code::Blocks IDE, tačiau MinGW (GNU GCC for Windows) nerodo stebuklų ir neduoda to ko iš jo aš noriu. Juo labiau probleminis yra wxWidgets įrankis. Nors su Code::Blocks naudojant Code::Blocks integruotą wxSmith pluginą, galiu daryti tai ką galiu ir su MS Visual Studio – t.y. GUI elementų drag-n-drop’as, event bind’as ir t.t. neparašant nė eilutės kodo, tačiau visas tas daiktas nenori kompiliuoti taip kaip jam reikėtų, nors ir gražiai atrodo:

Bet error’ai tiesiog žudo:

————– Build: Debug in wxWidgetsDemo2 —————
Compiling: wxWidgetsDemo2App.cpp
Compiling: wxWidgetsDemo2Main.cpp
Compiling: resource.rc
Linking executable: bin\Debug\wxWidgetsDemo2.exe
c:/program files (x86)/codeblocks v10.05/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw29ud
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 17 seconds)
1 errors, 0 warnings

Bei:

||=== wxWidgetsDemo2, Debug ===|
ld.exe||cannot find -lwxmsw29ud|
||=== Build finished: 1 errors, 0 warnings ===|

Tiesog tampa kova su kompiuteriu.

Todėl, galbūt kažkas norės užbaigti, arba pačiam vėliau pavyks tai padaryti, bet iki tol parašysiu ką padariau:

1. Nueinate į saitą:

http://sourceforge.net/projects/wxwindows/

ir atsisiunčiate wxMSW-2.9.1-Setup.exe (24.4MB) spaudami tą didelį žalią mygtuką.

Sudiegiate viską by defaulf nekeisdami instaliacijos direktorijos į C:\wxWidgets-2.9.1\

2. Pasileidžiate Code::Blocks, spaudžiate New -> Project, pasirenkate wxWidgets application, ten dar pasirenkate po to GCC kompiliatorių, suvedate SVN duomenis bet kokius (nebent rimtą TeamProject’ą kursite), bei pasirenkate sukonfigūruoti wxWidgets.

3.Toliau reikės pasirinkti wxWidgets install path’ą, jį pasirenkate tą kur instaliavote, t.y.  C:\wxWidgets-2.9.1\ (jame yra direktorijos ‘lib’, ‘include’ ir kitos). Dar galite uždėti varnelę __WX_DEBUG__ environment variable’ui.

———

Pagal idėją ten jeigu norite debug ir release dar ten papildomai galima priskirti prie project build optionų, tačiau tai man nebuvo svarbu, nes projekto nepavyko sukompiliuoti, dėl blogo pradžioje buvusių error’ų.

Pagal idėją dar bandžiau ir:

http://wiki.codeblocks.org/index.php?title=FAQ#Q:_How_do_I_use_both_Debug_and_Release_builds_of_wx_libraries.3F

T.y.

1. Windows Button’as -> Run…

2. ‘cmd’ [enter]

3. cd C:\

4.cd wxWidgets-2.9.1\build\msw

5. Na o tada jau bandžiau visai, bet naudos visvien buvo nulis:

Bandžiau taip:
C:\wxWidgets-2.9.1\build\msw> “C:\Program Files (x86)\CodeBlocks v10.05\MinGW\bin\mingw32-make” -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1

ir šitaip:
C:\wxWidgets-2.9.1\build\msw> “C:\MinGW\bin\mingw32-make” -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=1 BUILD=debug UNICODE=1

ir štai šitaip:
C:\wxWidgets-2.9.1\build\msw> “C:\Program Files (x86)\CodeBlocks v10.05\MinGW\bin\mingw32-make” -f makefile.gcc BUILD=debug SHARED=1 MONOLITHIC=1 UNICODE=1

ir netgi taip:
C:\wxWidgets-2.9.1\build\msw>“C:\Program Files (x86)\CodeBlocks v10.05\MinGW\bin\mingw32-make” -f makefile.gcc USE_XRC=1 SHARED=1 MONOLITHIC=1 BUILD=debug UNICODE=1

 Tačiau visvien errorai:
if not exist ..\..\lib\gcc_dll\mswu mkdir ..\..\lib\gcc_dll\mswu
gcc -c -o gcc_mswudll\wxregex_regcomp.o  -O2 -mthreads  -DHAVE_W32API_H -DNDEBUG
 -I..\..\include -I..\..\lib\gcc_dll\mswu -D__WXMSW__  -D_UNICODE   -MTgcc_mswud
ll\wxregex_regcomp.o -MFgcc_mswudll\wxregex_regcomp.o.d -MD -MP ../../src/regex/
regcomp.c
gcc: CreateProcess: No such file or directory
mingw32-make: *** [gcc_mswudll\wxregex_regcomp.o] Error 1

arba:
cpp: Too many arguments
mingw32-make: *** [gcc_mswuddll\wxregex_regcomp.o] Error 1

Susiintalianau netgi atskirai MinGW, prisidėjau per Computer->Properties->Environment Variables MinGW ir GCC_EXEC_PREFIX, pagal BLIDE tutorial’ą:

VISTA AND WINDOWS 7 ONLY:
Once installed, copy the contents of the “MinGW\libexec\gcc\mingw32\3.4.2″ directory into “MinGW\bin”


ANY WINDOWS OS:
1.- Click the start button, right click on ‘My Computer’ >> ‘Properties’. Click the ‘Advanced Tab’ and at the bottom you will see the ‘Environment Variables’ button. Click that.
It should open up a new window with two boxes named ‘User Variables for blah’ and ‘System Variables’.
2.- Click ‘New’ for User Variables and in the ‘Variable Name’Box type MinGW. In the ‘Variable Value’ Box enter the path to the MinGW installation ie C:\MinGW. Then click OK.
3.- In the ‘System Variables’ box, scroll down until you see the variables Path. Click on it and click the edit button. In the ‘Variable Value’ box, move your curser to the end of text, add a semi colon, and put the path to your MinGW\bin directory. eg, c:\MinGW\Bin. Click ok and ok again and if you are using windows XP, you are ready to go, if you’re using Vista or Win7, you have to make one little additional step:
WINDOWS VISTA AND WINDOWS 7:
4.- The same way you have added the environment variable called MinGW (step 2), you should create an environment variable named GCC_EXEC_PREFIX and set it to c:\MinGW

Tačiau naudos visvien buvo nulis. Šiam kartui užsiknisimo užteks. Kol kas grafinį GUI C++ kalbai yra pavykę sukurti tik DOS terpei, na bent Microsoft Visual Studio projektuose, tačiau ten jau nėra tas įprastas C++, o Visual C++, kuris šiek tiek skirasi nuo C++ (nors Code::Blocks palaiko ir Visual C++).

Tiesa, NetBeans’ams su su Swing GUI API dar toli gražu iki to ką mums siūlo Microsft su savo Visual Studio GUI Api, naudojamu C#, Visual Basic, Visual C++ aplikacijoms kurti… Na bet turime tai ką turime…

Java, C++, C#, Php, Pascal redaktoriai ir kompiliatoriai

2009.09.12 Xamas Komentarų: 2

Pamaniau, pasidalinsiu mintimis ir atradimais, padarytus per tuos studijų ir iki studijinius metus.

Yra daugybė programavimo kalbų ir daugybė jų redaktorių.

Šiaip dažnai esu gana alergiškas ‘viskas viename’, bei ‘milžiniškos apimties’ programoms. Todėl renkuosi alternatyvas.

Šį kartą skip’insime, terminal’ą, ir Kubuntu, Linux 5 ir pan. pingvinus, nes visgi namuose dirbu XP langais(Windows XP SP2)

Taigi nuosekliai:

Pascal(programavimo kalba nuo kurios mane pykina).

Kompiliatorius: Free Pascal

Redaktorius(Source): Free Pascal (LT versija)

Beje LT versija yra tikrai puikiai paruošta, ir EN varianto tikrai nereikia

Alternatyvos: Senutėlis Turbo Pascal, ir dar keletas nereikšmingų

C/C++ :

Unversitete ir pan. bandys siūlyti visad matyt “Dev C++” programą, kuri mano nuomone po mėnesio darbo ja, yra tikras nieko vertas šlamštas. Ja nebent ‘makefile’ patogiau pasiredaguoti, t.y. dalyką kuris taip pat yra atgyvena(turiu omeny redagavimą pačiam)

Na arba iškart bus siūlomas maksimalizmas – Microsoft Visual Studio. 5 GB instaliuotas gigantas.

Aš asmeniškai pasirinkau: Code::Blocks (CodeBlocks) . Ši programa nėra didelė – užima vos ~100MB, tačiau tikrai yra tas ko bent jau man ir reikia. Ir tvarkinga, ir funkcionalu, ir kur kas geriau/patogiau už “Dev C++”, bei nėra tokia griozdiškai kaip Visual Studio. Be to jos kompiliatorių ir derinimo terpė labai interaktyvi, taip kad galima sakyti jog galima pasirinkti beveik bet ką.

Code::Blocks yra ir kompiliatorius ir puikus redaktorius.

C# (Microsoft’o Java arba ‘užturbintas’ Pascal’is):

Nesu didelis šios kalbos mėgėjas, bet čia be abejonės lyderis yra M$ tools’as “Microsoft Visual Studio”.

Java:

Pagrindiniai įrankiai: NetBeans, JBuilder bei Eclipse. Kol kas labiausiai sužavėjęs yra “NetBeans”, jeigu tiksliau, tai “JDK with NetBeans IDE Java SE bundle” (JDK – Java Developer Kit). Beje JDK įmanoma atsisiųsti tik iš Sun tinklapio :D . Download’as pilnos Java yra ~135MB, o instaliuota ~430MB, kas gal ir nėra labai mažai, bet programa tikrai gana puikiai susitvarko su mano poreikiais.

Php grupė(HTML, CSS, Php, JavaScript,MySQL DB):

Mano mėgstamiausia :) . Redaktorius Php sąsajai be abejonės Notepad++. Gana aiškus lyderis šioje srityje. Nors teoriškai galima būtų užleisti ir kompiliatorių, bet tai nėra prasminga.

Kompiliatorius šiuo atveju yra – serveris kompiuteryje EasyPhp . Turi puikią lietuvybę ir yra labai paprastas naudoti. Tai tarsi patobulintas WAMP atskirų dalių serverio instaliacijos procesas.

 

———

O dabar trumpai:

  • Pascal redaktorius: Free Pascal (LT)
  • Pascal kompiliatorius: Free Pascal (LT)

 

  • C++ redaktorius: CodeBlocks (Code::Blocks)
  • C++ kompiliatorius: CodeBlocks (Code::Blocks)

 

  • Java redaktorius: NetBeans
  • Java kompiliatorius: JKD with NetBeans

 

  • C# redaktorius: Microsoft Visual Studio
  • C# kompiliatorius: Microsoft Visual Studio

 

  • Php redaktorius(+CSS, JavaScript,HTML,MySQL DB): Notepad++
  • Php kompiliatorius: EasyPhp (LT)