2011-08-28 16 views
6

Sto provando a compilare le librerie statiche per Graphviz per includerle in un'app iOS, ma non riesco a farlo funzionare. Ecco cosa ho fatto finora, usando graphviz 2.28.0], Xcode 4.1, OSX 10.7 e sto prendendo di mira il simulatore iOS.Costruisci librerie statiche Graphviz per iOS

ho trovato Glen Low's configure instructions, e con qualche congetture informato aggiornamento questi per:

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

Questo funziona, ma poi il "fare" funziona per un po 'e gli errori fuori 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 non capisco tutte le specifiche di architettura, quindi qualsiasi aiuto per farlo funzionare è il benvenuto.

risposta

0

Sembra che il linker stia cercando di collegarsi alle librerie di sistema installate sul Mac. Queste librerie saranno tutte compilate per i386 o x86_64 che non funzioneranno durante la compilazione di librerie per iPhone. Dovrai riconfigurare il linker per collegarti alle librerie fornite con l'SDK dell'iPhone.

Si noti inoltre che sarà necessario compilare la libreria due volte, una volta come armv6 e nuovamente come armv7. iPhone 3G e alcuni dei vecchi iPod Touch utilizzano l'architettura armv6, mentre i nuovi iPhone utilizzano l'architettura armv7. Dopo aver compilato le librerie sotto entrambe le architetture puoi usare lipo (digita "man lipo" nel tuo Terminale per maggiori informazioni) per creare una singola libreria statica con entrambe le architetture al suo interno. Se hai intenzione di sviluppare la tua app utilizzando il simulatore iPhone/iPad, ti consiglio anche di compilarla una volta come i386 in modo da poter utilizzare la tua libreria con il simulatore. Ancora una volta, lipo può creare una singola libreria statica con tutte e 3 le architetture al suo interno.

Ora il sito Web GraphViz sembra irraggiungibile al momento, quindi non ho potuto scaricare la libreria ed eseguire lo script di configurazione come hai fatto tu, ma sospetto che prima di eseguire "make" devi apportare le seguenti modifiche al makefile prodotto dallo script configure. A seconda della versione dell'SDK iOS che hai scelto come target e della versione di gcc che hai sul tuo computer, potresti dover modificare alcune delle seguenti modifiche, in modo che siano appropriate per il tuo ambiente. Le istruzioni che seguono costruiranno per armv6. Dovrai modificare le impostazioni da creare per armv7 una volta che sei pronto per affrontare quell'architettura.

Ricerca CC = cc e modificarla in: CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2

Trova i386 -arch in CFLAG e modificarla in: ARMv6 -arch

Trova CFLAG e aggiungere all'inizio !!: -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk

Trova SHARED_LDFLAGS = -arch i386 -dynamiclib e modificarlo in: SHARED_LDFLAGS = -arch armv6 -dynamiclib

+0

Qualcuno può confermare se questo funziona o no? –

1

Problema è imo che mkdefs viene eseguito durante il processo di generazione stesso dopo che è stato creato. Quindi, se costruisci per armv6 o armv7, il file non può essere eseguito sulla riga di comando di Mac OS X. La mia soluzione era creare un mkdefs per l'architettura i386 (che è necessario anche per il simulatore di iPhone) e copiarlo nella libreria/gvpr directory dopo aver ricevuto questo errore. Assicurarsi che il file non possa essere sovrascritto e riavviare la build.

2

Ho funzionato.Lo script di compilazione non riesce alla fine quando tenta di creare un eseguibile poiché è compilato per i386 invece di x86 o x86_64 ma tutte le librerie vengono compilate correttamente.

# 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

si prega di dare un'occhiata a http://stackoverflow.com/questions/10941247/graphviz-for-ios-build-with-xcode-4-3-fails-with-ld-error in base alla risposta –

Problemi correlati