Construire des bibliothèques Graphviz statiques pour iOS

J'essaie de build les bibliothèques statiques pour Graphviz pour les inclure dans une application iOS, mais je ne peux pas le faire fonctionner. Voici ce que j'ai fait jusqu'à présent, en utilisant graphviz 2.28.0], Xcode 4.1, OSX 10.7 et je vise le simulateur iOS.

J'ai trouvé les instructions de configuration de Glen Low , et avec quelques conjectures informées mises à jour à:

./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" 

Cela fonctionne, mais le "make" fonctionne pendant un certain time et des erreurs avec:

 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 

Je ne comprends pas bien toutes les spécifications d'architecture, donc toute aide pour que cela fonctionne est la bienvenue.

J'ai eu ce travail. Le script de construction échoue à la fin quand il a essayé de faire un exécutable puisqu'il est compilé pour i386 au lieu de x86 ou x86_64 mais toutes les bibliothèques se construisent très bien.

 # 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 

Le problème est que mkdefs est exécuté pendant le process de construction après sa création. Donc si vous construisez pour armv6 ou armv7 le file ne peut pas être exécuté sur la command line de Mac OS X. Ma solution de contournement était de build un mkdefs pour l'architecture i386 (qui est également nécessaire pour le simulateur iPhone) et de le copyr dans la lib / gvpr après l'obtention de cette erreur. Assurez-vous que le file n'a pas pu être remplacé et redémarrez la version.

Il semble que l'éditeur de liens essaie de créer un lien vers les bibliothèques système installées sur votre Mac. Ces bibliothèques seront toutes compilées pour i386 ou x86_64, ce qui ne fonctionnera pas lors de la compilation de bibliothèques pour iPhone. Vous devrez reconfigurer l'éditeur de liens pour le lier aux bibliothèques fournies avec le SDK iPhone.

Il convient également de noter que vous devrez probablement comstackr la bibliothèque deux fois – une fois comme armv6 et de nouveau comme armv7. L'iPhone 3G et certains des anciens iPod Touches utilisent l'architecture armv6, tandis que les nouveaux iPhones utilisent l'architecture armv7. Après avoir compilé les bibliothèques sous les deux architectures, vous pouvez utiliser lipo (tapez "man lipo" dans votre Terminal pour plus d'informations) pour créer une bibliothèque statique unique avec les deux architectures. Si vous allez développer votre application en utilisant le simulateur iPhone / iPad, alors je suggère également de comstackr une fois en tant que i386 afin que vous puissiez utiliser votre bibliothèque avec le simulateur. Encore une fois, lipo peut créer une seule bibliothèque statique avec les trois architectures.

Maintenant, le site Web de GraphViz semble être inaccessible pour le moment, donc je n'ai pas pu download la bibliothèque et exécuter le script configure comme vous l'avez fait, mais je suppose qu'avant d'exécuter "make", vous devriez apporter les changements suivants au makefile par le script de configuration. En fonction de la version du SDK iOS que vous ciblez et de la version de gcc que vous avez sur votre ordinateur, vous devrez peut-être modifier certaines des modifications ci-dessous pour qu'elles soient adaptées à votre environnement. Les instructions ci-dessous seront construites pour armv6. Vous devrez changer les parameters pour build pour armv7 une fois que vous êtes prêt à attaquer cette architecture.

Recherchez CC = cc et remplacez-le par: CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2

Trouver -arch i386 dans CFLAG et le changer pour: -arch armv6

Trouver CFLAG et append à la BEGINNING !!: -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk

Recherchez SHARED_LDFLAGS = -arch i386 -dynamiclib et remplacez-le par: SHARED_LDFLAGS = -arch armv6 -dynamiclib