2011-08-28 77 views
6

我正在嘗試爲Graphviz構建靜態庫,以將它們包含在iOS應用程序中,但我無法使其運行。這是我迄今爲止所做的,使用graphviz 2.28.0],Xcode 4.1,OSX 10.7,我的目標是iOS模擬器。構建用於iOS的靜態Graphviz庫

我發現Glen Low's configure instructions,並與一些知情的猜測更新了這些到:

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

這工作,但隨後的「讓」運行了一段時間,與錯誤的:

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 

我不太瞭解所有的架構規範,所以任何幫助實現它的工作都是非常受歡迎的。

回答

0

看起來鏈接器試圖鏈接到Mac上安裝的系統庫。這些庫都將被編譯爲i386或x86_64,這在編譯iPhone庫時不起作用。您需要重新配置鏈接器以鏈接到iPhone SDK中的庫。

還應該注意的是,您可能需要兩次編譯庫 - 一次是armv6,另一次是armv7。 iPhone 3G和一些較舊的iPod Touch使用armv6架構,而較新的iPhone使用armv7架構。在兩種體系結構下編譯庫之後,您可以使用lipo(在終端中輸入「man lipo」以獲取更多信息),以創建一個包含兩種體系結構的靜態庫。如果您打算使用iPhone/iPad模擬器開發您的應用程序,那麼我還建議一次編譯爲i386,以便您可以在模擬器中使用您的庫。同樣,lipo可以創建一個包含所有3種體系結構的靜態庫。

現在GraphViz網站似乎目前無法訪問,所以我無法像下載庫一樣運行配置腳本,但我懷疑在運行「make」之前,您應該進行以下更改由配置腳本生成的makefile。根據您所定位的iOS SDK版本以及您機器上的gcc版本,您可能需要調整以下一些更改,以便適合您的環境。下面的說明將爲armv6構建。一旦準備好解決該架構,您將需要更改爲armv7構建的設置。

查找CC = CC和它更改爲: CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2

查找-arch I386在CFLAG並將它更改爲: -arch的ARMv6

查找CFLAG並添加到開始!!: -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk

查找SHARED_LDFLAGS = -arch i386的-dynamiclib並將其更改爲: SHARED_LDFLAGS = -arch armv6 -dynamiclib

+0

有人可以確認這是否工作? –

1

問題在於,mkdefs在構建過程本身被創建後執行。所以如果你爲armv6或者armv7構建的話,這個文件就不能在Mac OS X的命令行中執行。我的解決方法是爲架構i386(也是iPhone模擬器所需的)構建一個mkdefs,並將它複製到lib/gvpr目錄得到這個錯誤後。確保文件不能被覆蓋並重新啓動構建。

2

我得到了這個工作。構建腳本在嘗試製作可執行文件時最終失敗,因爲它是爲i386而不是x86或x86_64編譯的,但所有庫都可以很好地構建。

# 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

請看看http://stackoverflow.com/questions/10941247/graphviz-for-ios-build-with-xcode-4-3-fails-with-ld-error根據你的答案 –