ios - not - gcc compiler mac
Compile una aplicación de línea de comandos iOS Objective-C a través de gcc en mac (4)
¿Por qué no usar xcodebuild
lugar de llamar directamente a gcc
?
Aquí hay una aplicación de consola Objective-C muy simple:
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
NSLog(@"Hello world!");
[pool drain];
return 0;
}
Lo compilo con gcc main.m -o main -ObjC -framework Foundation -framework CoreLocation
en mi Mac.
También tengo el SDK de iOS instalado en mi mac. ¿Cómo puedo modificar este comando para compilar el mismo código, en mi computadora , para usarlo en un dispositivo iOS (con jailbreak) ?
Luego podría transferir el ejecutable a través de ssh y firmarlo con ldid
.
Para casos simples esto podría ser lo suficientemente bueno:
gcc -o output -Wall -std=c99 source.m -framework Foundation -lobjc
Actualizar:
Este comando no funciona para una aplicación de línea de comandos de iOS; el arco debe configurarse correctamente. No tengo ningún entorno de desarrollo de iOS en la actualidad; probablemente la bandera de -march ayudaría.
Ver la respuesta aceptada.
Para compilar el código iOS en su mac, necesita usar compilador cruzado, es decir, un compilador que se ejecute en una plataforma Intel y sea capaz de generar código binario ARM.
Xcode proporciona tal compilador cruzado. Se encuentra en (suponiendo que está utilizando Xcode 4.3 distribuido desde App Store)
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
Para un tipo de programa simple, "hola mundo", estoy compilando usando
alias c="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2"
c -o hello hello.c -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/
Suponiendo que no está casado con el antiguo GCC, desencadenando deliberadamente errores en mi proyecto para llegar a una posición en la que Xcode revelará la línea de comandos utilizada y reveló lo siguiente para la compilación:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -x object-c -arch armv6 -fmessage-length = 0 -fdiagnostics-print-source-range-info -fdiagnostics-show-category = id -fdiagnostics -pasables-fixits -std = gnu99 -Wno-trigraphs -fpascal-strings -O0 -Whissing-prototypes -Wreturn-type -Wparentheses -Wswitch -Wno-unused-parámetro -Wunused-variable -Wunused-value -DDEBUG = 1 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -gdwarf-2 -mthumb "-DIBOutlet = atributo ((iboutlet))" "-DIBOutletCollection (ClassName) = atributo ((iboutletcollection) (clase) ) "" -DIBAction = void) atributo ((ibaction) "-miphoneos-version-min = 3.2 -iquote [un archivo de contabilidad] -I [una lista de encabezados] -iquote [más encabezados] -I [una ruta de inclusión] -fpch-preprocess -F [puntero al directorio para los archivos de depuración] -include [el encabezado de mi prefijo] -c AppDelegate.m -o AppDelegate.o
Si está declinando el uso de Xcode, entonces supongo que puede cortar al menos las cosas sobre las salidas de Interface Builder. Y la creación de armv6 en lugar de v7 es probablemente un error en mi proyecto.
Y luego, para enlazar:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L [algo apropiado] ] -filelist [a .LinkFileList] -dead_strip -miphoneos-version-min = 3.2 -framework SystemConfiguration -framework UIKit -framework Foundation -framework CoreGraphics -o [algo apropiado]
El archivo .LinkedFileList parece ser solo una lista de archivos de objetos, uno por línea. Xcode ha puesto la ruta completa a cada uno allí, aunque creo que las rutas relativas son aceptables.
Aprecio que esta no sea una respuesta completa, pero espero que ayude?