Mål C for Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad ville være den bedste måde at skrive Objective-C på Windows-platformen?


Cygwin og gcc? Er der en måde, jeg på en eller anden måde kan integrere dette i Visual Studio?


På samme måde - er der nogen forslag til, hvordan man linker ind og bruger Windows SDK til noget som dette. Det er et andet dyr, men jeg ved, at jeg kan skrive samling og link i Windows DLL'erne, der giver mig adgang til disse opkald, men jeg ved ikke hvordan man gør dette uden googling og får flere retninger.


Er der nogen opmærksom på en god online eller bogressource til at gøre eller forklare disse slags ting?

Bedste reference


Udvidelse af de to tidligere svar, hvis du bare vil have Objective-C, men ikke nogen af ​​kakao-rammerne, så arbejder gcc på enhver platform. Du kan bruge det gennem Cygwin eller få MinGW. Men hvis du vil have kakao rammer, eller i det mindste en rimelig delmængde af dem, så er GNUStep og Cocotron dine bedste spil.


Cocotron implementerer mange ting, som GNUStep ikke gør, f.eks. CoreGraphics og CoreData, selvom jeg ikke kan tjekke for, hvor komplet implementeringen er på en bestemt ramme. Deres mål er at holde Cocotron opdateret med den nyeste version af OS X således at ethvert levedygtigt OS X-program kan køre på Windows. Fordi GNUStep typisk bruger den nyeste version af gcc, tilføjer de også støtte til Objective-C ++ og mange Objective-C 2.0-funktioner.


Jeg har ikke testet disse funktioner med GNUStep, men hvis du bruger en tilstrækkelig ny version af gcc, kan du muligvis bruge dem. Jeg kunne ikke bruge Objective-C ++ med GNUStep for nogle år siden. GNUStep compilerer imidlertid fra næsten enhver platform. Cocotron er et meget mac-centreret projekt. Selv om det sandsynligvis er muligt at kompilere det på andre platforme, kommer det XCode-projektfiler, ikke makefiler, så du kan kun kompilere sine rammer ud af boksen på OS X . Det kommer også med instruktioner om at opbygge Windows-apps på XCode, men ikke nogen anden platform. Det er sandsynligvis muligt at oprette et Windows-udviklingsmiljø for Cocotron, men det er ikke så nemt at sætte en op for GNUStep, og du vil være alene, så GNUStep er absolut den rigtige vej, hvis du udvikler dig på Windows, i modsætning til bare for Windows.


For hvad det er værd, er Cocotron licenseret under MIT-licensen, og GNUStep er licenseret under LGPL.

Andre referencer 1


Du kan bruge mål C i Windows-miljøet. Hvis du følger disse trin, skal det fungere fint:



  1. Besøg GNUstep-webstedet og download GNUstep MSYS Subsystem (MSYS for GNUstep), GNUstep Core (Biblioteker til GNUstep) og GNUstep Devel

  2. Når du har downloadet disse filer, skal du installere i den ordre, eller du vil have problemer med konfigurationen

  3. Naviger til C:GNUstepGNUstepSystemLibraryHeadersFoundation 1 og sørg for at Foundation.h findes

  4. Åbn en kommandoprompt og kør gcc -v for at kontrollere, at GNUstep MSYS er korrekt installeret (hvis du får en fil, der ikke er fundet fejl, skal du sørge for, at mappen binGNUstep MSYS]] er i din PATH)

  5. Brug dette simple 'Hello World' -program til at teste GNUsteps funktionalitet: [22]


    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [**NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
    

  6. Gå tilbage til kommandoprompten og cd til hvor du gemte 'Hello World' -programmet og kompilér det derefter: 2


    gcc -o helloworld.exe <HELLOWORLD>.m -I /GNUstep/GNUstep/System/Library/Headers -L /GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
    

  7. Indtast endelig helloworld fra kommandoprompten for at køre den



Alt det bedste, og sjov med Objective-C!





NOTER :



  1. Jeg brugte standardinstallationsbanen - juster din kommandolinje i overensstemmelse hermed

  2. Sørg for, at mappens sti ligner min, ellers får du en fejl


Andre referencer 2


Også:



  Cocotron er et open source-projekt, der har til formål at implementere en platform-objektiv-API-API, der ligner den, der beskrives af Apple Inc.s Cocoa-dokumentation. Dette omfatter AppKit, Foundation, Objective-C runtime og support API'er som CoreGraphics og CoreFoundation.



http://www.cocotron.org/[23]

Andre referencer 3


WinObjC? Windows Bridge til iOS (tidligere kendt som 'Project Islandwood').


Windows Bridge til iOS (også kaldet WinObjC) er et Microsoft open source-projekt, der giver et mål-C udviklingsmiljø til Visual Studio/Windows. Derudover yder WinObjC støtte til iOS API-kompatibilitet. Mens den endelige udgivelse vil ske senere i efteråret (hvilket gør det muligt for broen at drage nytte af nye værktøjsmuligheder, der sendes med den kommende Visual Studio 2015 Update)


Broen er tilgængelig for open source-samfundet nu i sin nuværende tilstand. Mellem nu og efterår. IOS-broen som et open source-projekt under MIT-licensen. I lyset af projektets ambition gør det let for iOS-udviklere at opbygge og køre apps på Windows.


Salmaan Ahmed har en dybtgående post på Windows Bridge til iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/diskutere compiler, runtime, IDE integration, og hvad broen er og ikke er. Bedste af alt, kildekoden til iOS-broen er live på GitHub lige nu. [24] [25]


IOS-broen understøtter både Windows 8.1 og Windows 10-apps, der er bygget til x86- og x64-processorarkitekturer, og snart vil vi tilføje kompilatoroptimeringer og support til ARM, som tilføjer mobil support.

Andre referencer 4


Jeg har blandede følelser om Cocotron-projektet. Jeg er glad for, at de frigiver kildekoden og deler, men jeg føler ikke, at de gør ting den nemmeste måde.


Eksempler.

Apple har udgivet kildekoden til målet-c runtime, som omfatter egenskaber og affaldssamling. Cocotron-projektet har dog deres egen implementering af målet-c runtime. Hvorfor genere at duplikere indsatsen? Der er endda en Visual Studio Project-fil, der kan bruges til at opbygge en objc.dll-fil. Eller hvis du er virkelig doven, kan du bare kopiere DLL-filen fra en installation af Safari på Windows. [26]


De forstyrrede heller ikke at udnytte CoreFoundation, som også er åbent af Apple. Jeg stillede et spørgsmål om dette, men fik ikke svar. [27]


Jeg synes, at den nuværende bedste løsning er at tage kildekoden fra flere kilder (Apple, CocoTron, GnuStep) og slå det sammen til det, du har brug for. Du bliver nødt til at læse en masse kilder, men det vil være det endelige resultat.

Andre referencer 5


Jeg er opmærksom på, at dette er et meget gammelt indlæg, men jeg har fundet en løsning, der først er blevet tilgængelig for nylig og gør det muligt for næsten alle Objective-C 2.0-funktioner på Windows-platformen.


Med fremkomsten af ​​gcc 4.6 blev understøttelse af Objective-C 2.0-sprogfunktioner (blokke, punktsyntaks, syntetiserede egenskaber osv.) Tilføjet til Objective-C-kompilatoren (se udgivelsesnoterne for detaljer). Deres runtime er også blevet opdateret til at fungere næsten identisk med Apples egen Objective-C 2.0 runtime. Kort sagt betyder det, at (næsten) ethvert program, der legitimt kompilerer med Clang på en Mac, også vil kompilere med gcc 4.6 uden ændring. [28]


Som et sidebemærkning er en funktion, der ikke er tilgængelig, ordbog/array/etc-bogstaver, da de alle er kodet til Clang for at bruge Apples NSDictionary, NSArray, NSNumber, osv. Klasser.


Men hvis du er glad for at leve uden Apples omfattende rammer, kan du.
Som nævnt i andre svar, giver GNUStep og Cocotron modificerede versioner af Apples klassebiblioteker, eller du kan skrive din egen (min foretrukne mulighed).


MinGW er en måde at få GCC 4.6 på Windows-platformen og kan downloades fra MinGWs hjemmeside. Sørg for at installere C, C ++, Objective-C og Objective-C ++, når du installerer det. Selvom det er valgfrit, foreslår jeg også at installere MSYS-miljøet. [29]


Når den er installeret, kan Objective-C 2.0-kilden kompileres med:


gcc MyFile.m -lobjc -std=c99 -fobjc-exceptions -fconstant-string-class=clsname (etc, additional flags, see documentation)


MinGW indeholder også support til kompilering af native GUI Windows-programmer med -mwindows flag. For eksempel:


g++ -mwindows MyFile.cpp


Jeg har ikke forsøgt det endnu, men jeg forestiller mig, om du omslutter dine Objective-C-klasser i Objective-C ++ i det højest mulige lag, skal du kunne integrere indfødt Windows GUI C ++ og Objective-C alt sammen i det ene Windows-program.

Andre referencer 6


Tjek WinObjC :


https://github.com/Microsoft/WinObjC[30]


Det er et officielt open source projekt fra Microsoft, der integreres med Visual Studio + Windows.

Andre referencer 7


Hvis du bare vil eksperimentere, er der en Objective-C compiler til .NET (Windows) her: qckapp [31]

Andre referencer 8


Du kan få en objektiv c compiler, der vil fungere sammen med Windows og spille godt med Visual Studio 2008 \ 2010 her.


open-c flite [32]


Bare download den nyeste kilde. Du behøver ikke at opbygge alle CF-Lite Der er en løsning kaldet objc.sln. Du bliver nødt til at lave nogle få af de indbyggede stier, men så vil det fungere fint. Der er endda et testprojekt inkluderet, så du kan se nogle objektiv-c. m filer kompileres og arbejder i visuel studio. En trist ting er det kun virker med Win32 ikke x64. Der er nogle samlingskoder, der skal skrives til x64 for at understøtte det.

Andre referencer 9


Et nyligt forsøg på at porte Object C 2.0 til Windows er det subjektive projekt. [33]


Fra Readme:



  Subjektivt er et forsøg på at bringe mål C 2.0 med ARC-støtte til
  Windows.

  
  Dette projekt er en gaffel af objc4-532.2, Objective C runtime that
  skibe med OS X 10.8.5. Porten kan kryds-kompileres på OS X ved hjælp af
  llvm-clang kombineret med MinGW linkeren.

  
  Der er visse begrænsninger, hvoraf mange er et spørgsmål om ekstra
  arbejde, mens andre, som undtagelser og blokke, afhænger af mere
  seriøst arbejde i 3. parts projekter. Begrænsningerne er:

  
  • Kun 32-bit - 64-bit er på vej

  
  • Kun statisk sammenkobling - dynamisk sammenkobling er i gang

  
  • Ingen lukninger/blokke - indtil libdispatch understøtter dem på Windows

  
  • Ingen undtagelser - indtil clang understøtter dem på Windows

  
  • Ingen gammel stil GC - indtil nogen bekymrer sig ...

  
  • Internals: ingen vtables, ingen gdb support, bare plain malloc, nr
  preoptimizations - nogle af disse ting vil være tilgængelige under
  64-bit build.

  
  • I øjeblikket kræves en patched clang compiler; lappen tilføjer
  -fobjc-runtime=subj flag



Projektet er tilgængeligt på Github, og der er også en tråd om Cocotron-gruppen, der beskriver nogle af de fremskridt og problemer, der er opstået. [34] [35]

Andre referencer 10


Få GNUStep her [36]


Få MINGW her [37]


Installer MINGW
 Installer GNUStep
 Så test

Andre referencer 11


Hvis du er fortrolig med Visual Studio-miljøet,


Lille projekt: jGRASP med gcc
Stort projekt: Cocotron


Jeg hørte, at der er emulatorer, men jeg kunne kun finde Apple II Emulator http://virtualapple.org/. Det ser ud til at være begrænset til spil. [38]

Andre referencer 12


Først og fremmest skal du glemme GNUStep værktøjer. Hverken ProjectManager eller ProjectCenter kan kaldes en IDE. Med al respekt ser det ud til, at fyre fra GNUStep -projektet sidder fast i slutningen af ​​80'erne (hvilket er da NeXTSTEP dukkede op). [39] [40]


Vim



ctags understøtter Objective-C siden r771 (Sørg for at vælge 5.9-versionen før release og tilføj --langmap=ObjectiveC:.m.h til kommandolinjen, se her), så du har en ordentlig kode færdiggørelse/tag navigation. [41]


Her er en kort vejledning i tilføjelse af Objective-C support til Vim tagbar plugin. [43]


Emacs



Det samme gælder for etags afsendt med moderne Emacsen, så du kan starte med Emacs Objective C Mode. YASnippet vil give nyttige skabeloner: [44] [45]


YASnippet objc-mode [46]


og hvis du vil have noget mere intelligent end den grundlæggende kodebaserede kodeudfyldning, så tag et kig på dette spørgsmål. [47] [48]


Eclipse



CDT understøtter Makefile -baserede projekter: [49]


Indtast billedbeskrivelse her [50]


- så teknisk kan du bygge dine mål-C-projekter ud af boksen (i Windows skal du bruge værktøjet Cygwin eller MinGW ). Det eneste problem er at kode editor, der vil rapportere mange fejl mod, hvad det synes er en ren C kode (on-the-fly kode kontrol kan slukkes, men stadig ...). Hvis du vil have ordentlig syntax fremhævning , kan du tilføje Eclim til din Eclipse og nyde alle de gode funktioner i både Eclipse og Vim (se ovenfor). [51]


Et andet lovende Eclipse plugin er Colorer, men det understøtter ikke Objective-C fra og med. Du er velkommen til at indsende en anmodning om en funktion selv. [52]


SlickEdit



SlickEdit, blandt andre funktioner i en stor IDE, understøtter Objective-C. Selvom det er ret komplekst at lære (ikke så kompliceret som Emacs selv), tror jeg, at dette er din bedste løsning, forudsat at du ikke har købt det (prisen er ret overkommelig). [53] [54] [[[55]


Derudover har den et Eclipse-plugin, som kan bruges som et alternativ til den frittstående editor. [56]


KDevelop



Ryktet har det, der findes en KDevelop patch (15 år gammel, men hvem bekymrer sig?). Jeg tror ikke personligt, at KDevelop er overlegen i forhold til Emacsen , så jeg ville ikke prøve at prøve det. [57]





Ovennævnte gælder også for mål-C-udvikling på Linux, da alle de nævnte værktøjer er mere eller mindre bærbare.