Toon posts:

[VS2010 | C++] Applicatie compilen voor windows en linux

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • xehbit
  • Registratie: Februari 2009
  • Laatst online: 18:21
Hallo Tweakers!

Al geruime tijd ben ik aan het programmeren in C++ met VS2010 voor Windows. Maar wil eigenlijk een server applicatie draaien die op linux en windows kan draaien. Ik maak gebruin include's die bijde linux en windows kunnen gebruiken bijv; <iostream>.

Dus mijn vraag is als volgt: Hoe kan ik compilen voor windows en linux tegelijk in VS2010. Of moet ik toch weer via VMware oid linux booten en daarin compilen met 'gcc'.

Acties:
  • 0Henk 'm!

  • de Zeester
  • Registratie: Oktober 2007
  • Laatst online: 24-12-2018
Met VS2010 kan je geen executables voor Linux genereren. De meest praktische oplossing is dan inderdaad Linux in een VM draaien en daar de code compileren.

Omdat je het over een server applicatie hebt neem ik aan dat je iets met sockets wil doen. Dat gaat niet lukken met enkel de standaard C++ library, deze heeft namelijk geen ondersteuning voor sockets. Er zijn wel cross platform libraries zoals boost en ACE die socket ondersteuning bieden.

Acties:
  • 0Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Daarop voortbordurend: waarom gebruik je voor de serverkant geen Java? :)

https://oneerlijkewoz.nl
I have these thoughts / so often I ought / to replace that slot / with what I once bought / 'cause somebody stole my car radio / and now I just sit in silence


Acties:
  • 0Henk 'm!

  • Rutix
  • Registratie: Augustus 2009
  • Laatst online: 25-05 12:42
Als je code portable is dan kun je het gewoon compilen met gcc op linux ofzo :). Ik persoonlijk maak vaak gebruik van een CI-achtige oplossing die dit gewoon allemaal voor mij doet ;).
CodeCaster schreef op dinsdag 24 mei 2011 @ 00:30:
Daarop voortbordurend: waarom gebruik je voor de serverkant geen Java? :)
Waarom wel :)?

[Voor 35% gewijzigd door Rutix op 24-05-2011 10:46]

Nothing to see here!


Acties:
  • 0Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Een van de voordelen is natuurlijk dat het een stuk makkelijker is om cross-platform te ontwikkelen. Maar ik zou zeker niet alleen op basis van dat criteria de keuze maken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0Henk 'm!

  • Rutix
  • Registratie: Augustus 2009
  • Laatst online: 25-05 12:42
Woy schreef op dinsdag 24 mei 2011 @ 11:17:
[...]

Een van de voordelen is natuurlijk dat het een stuk makkelijker is om cross-platform te ontwikkelen. Maar ik zou zeker niet alleen op basis van dat criteria de keuze maken.
Daar doelde ik ook op met mijn reply. We weten niet wat de topic starter precies wil maken en wat de requirements zijn.

En of het een stuk makkelijker is, zijn de verschillende meningen over. Ik vind C++ cross-platform ontwikkelen helemaal niet zo'n probleem, helemaal niet als ik me code portable houd d.m.v. Boost of Qt ;)

Nothing to see here!


  • cpt.spiff
  • Registratie: Augustus 2009
  • Laatst online: 21-04 23:18
Als ik je bericht goed lees, zie ik dat je eigenijk vraagt naar cross-compilatie naar Linux binaries onder Windows. Als je dat als zoekterm in Google gebruikt, zie je als snel dat dat niet zo vaak gebeurd. Iets vaker wordt er vanuit linux naar windows ge-crosscompiled.

Ik heb wel wat ervaring met het schrijven van applicaties voor zowel linux als windows. Als je een linux distributie vindt om op te werken (zoals je zelf aangeeft: in vmware kan het ook), is het compileren op windows voor windows en op linux voor linux het minste gedoe.

Wel zul je merken dat als je project wat groter wordt (meerdere sourcefiles), je al snel behoefte krijgt om ook een cross-platform make systeem te gebruiken, je kunt tenslotte je visual studio solution- en projectfiles niet gebruiken om te builden op linux. Een voorbeeld van zo'n cross-platform make is CMake. Er zijn er meer, dit is degene die ik gebruik. CMake genereert o.a. visual studio files voor windows en makefiles of eclipse project files onder linux. In plaats van een cross-platform make kun je ook kiezen voor een cross-platform IDE, zoals bijvoorbeeld Code::Blocks (je werkt dan in Code::Blocks in plaats van in Visual Studio).

Daarnaast, het is al genoemd door de Zeester, als je een service-applicatie wilt draaien, wil je waarschijnlijk iets op basis van sockets doen en is het handig om een library te gebruiken die je platform-onafhankelijke socket-functies biedt. Zoals eerder genoemd, ACE is een voorbeeld en ook boost.asio. Die laatste is mijn persoonlijke favoriet. Beide libraries vergen een investering in inleertijd en bieden naast pure socket-functies ook nog veel meer functies, met name voor asynchrone communicatie. Voor platform-onafhankelijkheid in het algemeen zijn de boost-libraries uberhaupt een goede tip.

Al met al vergt dit (cross-platform make/IDE en cross platform libraries) nogal wat inleertijd, maar bedenk dat er licht is aan het eind van de tunnel :). HTH. Succes.

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 11:58

Ventieldopje

I'm not your pal, mate!

Alternatief is spul schrijven in C# mbv. het mono framework ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


  • xehbit
  • Registratie: Februari 2009
  • Laatst online: 18:21
cpt.spiff schreef op woensdag 25 mei 2011 @ 01:50:
Als ik je bericht goed lees, zie ik dat je eigenijk vraagt naar cross-compilatie naar Linux binaries onder Windows. Als je dat als zoekterm in Google gebruikt, zie je als snel dat dat niet zo vaak gebeurd. Iets vaker wordt er vanuit linux naar windows ge-crosscompiled.

Ik heb wel wat ervaring met het schrijven van applicaties voor zowel linux als windows. Als je een linux distributie vindt om op te werken (zoals je zelf aangeeft: in vmware kan het ook), is het compileren op windows voor windows en op linux voor linux het minste gedoe.

Wel zul je merken dat als je project wat groter wordt (meerdere sourcefiles), je al snel behoefte krijgt om ook een cross-platform make systeem te gebruiken, je kunt tenslotte je visual studio solution- en projectfiles niet gebruiken om te builden op linux. Een voorbeeld van zo'n cross-platform make is CMake. Er zijn er meer, dit is degene die ik gebruik. CMake genereert o.a. visual studio files voor windows en makefiles of eclipse project files onder linux. In plaats van een cross-platform make kun je ook kiezen voor een cross-platform IDE, zoals bijvoorbeeld Code::Blocks (je werkt dan in Code::Blocks in plaats van in Visual Studio).

Daarnaast, het is al genoemd door de Zeester, als je een service-applicatie wilt draaien, wil je waarschijnlijk iets op basis van sockets doen en is het handig om een library te gebruiken die je platform-onafhankelijke socket-functies biedt. Zoals eerder genoemd, ACE is een voorbeeld en ook boost.asio. Die laatste is mijn persoonlijke favoriet. Beide libraries vergen een investering in inleertijd en bieden naast pure socket-functies ook nog veel meer functies, met name voor asynchrone communicatie. Voor platform-onafhankelijkheid in het algemeen zijn de boost-libraries uberhaupt een goede tip.

Al met al vergt dit (cross-platform make/IDE en cross platform libraries) nogal wat inleertijd, maar bedenk dat er licht is aan het eind van de tunnel :). HTH. Succes.
Zo. Dat is eens een hoop MOOIE informatie :). Ik zal hier morgen eens verder naar kijken. Heel erg bedankt!
Ventieldopje schreef op woensdag 25 mei 2011 @ 23:40:
Alternatief is spul schrijven in C# mbv. het mono framework ;)
Ja, dat heb ik al geprobeerd, en werk ik ook regelmatig mee. Echter vind in C++ toch iets fijner werken dan C#.

Anoniem: 311111

Om nog even terug te komen over die sockets: zowel Linux als Windows hebben socket libraries ingebouwd, die niet enorm veel van elkaar verschillen, met een paar #ifdef's kun je daar een mooie wrapper voor maken, of zoals al genoemd wordt, een bestaande wrapper gebruiken. :)

En CMake (of gewoon make, wordt ook ondersteund door VS (nmake)) is inderdaad een mooi systeem, ja.

  • Rutix
  • Registratie: Augustus 2009
  • Laatst online: 25-05 12:42
Anoniem: 311111 schreef op donderdag 26 mei 2011 @ 08:22:
Om nog even terug te komen over die sockets: zowel Linux als Windows hebben socket libraries ingebouwd, die niet enorm veel van elkaar verschillen, met een paar #ifdef's kun je daar een mooie wrapper voor maken, of zoals al genoemd wordt, een bestaande wrapper gebruiken. :)

En CMake (of gewoon make, wordt ook ondersteund door VS (nmake)) is inderdaad een mooi systeem, ja.
Ik vind de boost.asio toch fijner werken. Zowiezo is Boost meestal een must voor C++ programma's. Ik ehb weinig programma's geschreven waar ik geen gebruik heb gemaakt van Boost. Voordeel is natuurlijk dat het portable is ;)

Nothing to see here!

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee