2011-08-28 26 views
6

Estoy intentando construir las bibliotecas estáticas para que Graphviz las incluya en una aplicación iOS, pero no puedo hacer que funcione. Esto es lo que he hecho hasta ahora, usando graphviz 2.28.0], Xcode 4.1, OSX 10.7 y estoy apuntando al simulador de iOS.Crear bibliotecas estáticas de Graphviz para iOS

He encontrado Glen Low's configure instructions, y con un poco de conjeturas informadas actualizan estos para:

./configure --build=i486-apple-darwin --host=arm-apple-darwin9 --disable-dependency-tracking --enable-shared=no --enable-static=yes --enable-ltdl-install=no --enable-ltdl=no --enable-swig=no --enable-tcl=no --with-codegens=no --with-fontconfig=no --with-freetype2=no --with-ipsepcola=yes --with-libgd=no --with-quartz=yes --with-visio=yes --with-x=no --with-cgraph=no CC="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2" CPP="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -E" CXX="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2" CXXCPP="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -E" OBJC="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2" LD="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld" CPPFLAGS="-arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -miphoneos-version-min=4.0" CXXCPPFLAGS="-arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -miphoneos-version-min=4.0" 

Esto funciona, pero entonces el "hacer" se ejecuta por un tiempo y los errores hacia fuera con:

Making all in gvpr 
    CCLD mkdefs 
ld: warning: ignoring file mkdefs.o, file was built for armv6 which is not the architecture being linked (i386) 
ld: warning: ignoring file /usr/local/lib/libSystem.dylib, missing required architecture i386 in file 
ld: warning: symbol dyld_stub_binder not found, normally in libSystem.dylib 
Undefined symbols for architecture i386: 
    "_exit", referenced from: 
     start in crt1.10.6.o 
    "_main", referenced from: 
     start in crt1.10.6.o 
ld: symbol(s) not found for architecture i386 
collect2: ld returned 1 exit status 
make[3]: *** [mkdefs] Error 1 
make[2]: *** [all-recursive] Error 1 
make[1]: *** [all-recursive] Error 1 
make: *** [all] Error 2 

I No entiendo completamente todas las especificaciones de la arquitectura, por lo que cualquier ayuda para que esto funcione es bienvenido.

Respuesta

0

Parece que el vinculador está intentando vincular a las bibliotecas del sistema instaladas en su Mac. Esas bibliotecas se compilarán para i386 o x86_64, lo que no funcionará al compilar bibliotecas para iPhone. Tendrá que volver a configurar el vinculador para vincularlo con las bibliotecas que vienen en el iPhone SDK.

También debe tenerse en cuenta que probablemente tendrá que compilar la biblioteca dos veces: una vez como armv6 y otra vez como armv7. iPhone 3G y algunos de los iPod Touch anteriores usan la arquitectura armv6, mientras que los iPhones más nuevos usan la arquitectura armv7. Después de compilar las bibliotecas en ambas arquitecturas, puede usar lipo (escriba "man lipo" en su Terminal para obtener más información) para crear una única biblioteca estática con ambas arquitecturas. Si vas a desarrollar tu aplicación usando el simulador de iPhone/iPad, también sugiero compilar una vez como i386 para que puedas usar tu biblioteca con el simulador. Nuevamente, lipo puede crear una única biblioteca estática con las 3 arquitecturas en ella.

Ahora parece que el sitio web de GraphViz es inalcanzable en este momento, así que no pude descargar la biblioteca y ejecutar el script de configuración como lo hizo, pero sospecho que antes de ejecutar "make" debe hacer los siguientes cambios al archivo MAKE producido por el script de configuración. Dependiendo de la versión del iOS SDK al que se dirija y de la versión de gcc que tenga en su equipo, es posible que deba modificar algunos de los cambios a continuación para que sean apropiados para su entorno. Las siguientes instrucciones se compilarán para armv6. Tendrá que cambiar la configuración para compilar para armv7 una vez que esté listo para abordar esa arquitectura.

Búsqueda CC = cc y cambiarlo a: CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2

Encuentra i386 -arch en CFLAG y cambiarlo a: ARMv6 -arch

Encuentra CFLAG y agregar al comienzo !!: -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk

Encuentra SHARED_LDFLAGS = -arch i386 -dynamiclib y cámbialo a: SHARED_LDFLAGS = -arch armv6 -dynamiclib

+0

¿Alguien puede confirmar si esto funciona o no? –

1

El problema es que mkdefs se ejecuta durante el proceso de compilación después de haber sido creado. Entonces, si compila para armv6 o armv7, el archivo no se puede ejecutar en la línea de comandos de Mac OS X. Mi solución fue construir un mkdefs para la arquitectura i386 (que también es necesario para el simulador de iPhone) y copiarlo en la lib/gvpr directorio después de obtener este error. Asegúrese de que el archivo no pueda sobrescribirse y reinicie la compilación.

2

Tengo esto funcionando.La secuencia de comandos de compilación falla al final cuando intentó crear un archivo ejecutable, ya que se compila para i386 en lugar de x86 o x86_64, pero todas las bibliotecas se compilan perfectamente.

# For iPhoneOS 
export DEV_iOS=/Developer/Platforms/iPhoneOS.platform/Developer 
export SDK_iOS=${DEV_iOS}/SDKs/iPhoneOS5.0.sdk 
export COMPILER_iOS=${DEV_iOS}/usr/bin 
export CC=${COMPILER_iOS}/gcc 
export CXX=${COMPILER_iOS}/g++ 
export LDFLAGS="-arch armv7 -pipe -Os -gdwarf-2 -no-cpp-precomp -mthumb -isysroot ${SDK_iOS}" 
export CFLAGS=${LDFLAGS} 
export CXXFLAGS=${LDFLAGS} 
export LD=${COMPILER_iOS}/ld 
export CPP=${COMPILER_iOS}/llvm-cpp-4.2 
export AR=${COMPILER_iOS}/ar 
export AS=${COMPILER_iOS}/as 
export NM=${COMPILER_iOS}/nm 
export CXXCPP=${COMPILER_iOS}/llvm-cpp-4.2 
export RANLIB=${COMPILER_iOS}/ranlib 

./configure --host=arm-apple-darwin11 --disable-dependency-tracking --enable-shared=no --enable-static=yes --enable-ltdl-install=no --enable-ltdl=no --enable-swig=no --enable-tcl=no --with-codegens=no --with-fontconfig=no --with-freetype2=no --with-ipsepcola=yes --with-libgd=no --with-quartz=yes --with-visio=yes --with-x=no --with-cgraph=no 
+0

echa un vistazo a http://stackoverflow.com/questions/10941247/graphviz-for-ios-build-with-xcode-4-3-fails-with-ld-error en función de tu respuesta –

Cuestiones relacionadas