为iOS构build静态Graphviz库

我正在尝试为Graphviz构build静态库,以将它们包含在iOS应用程序中,但是我无法使其运行。 这是我迄今为止所做的,使用graphviz 2.28.0],Xcode 4.1,OSX 10.7,我的目标是iOS模拟器。

我find了Glen Low的configuration说明 ,并通过一些明智的猜测将这些更新为:

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

这是有效的,但是这个“make”会运行一段时间,并且出错:

 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 

我不太了解所有的架构规范,所以任何有助于这个工作的帮助是最受欢迎的。

我得到了这个工作。 构build脚本在尝试创build可执行文件时最后失败,因为它是为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 

问题在于,mkdefs是在构build过程本身之后被执行的。 所以如果你为armv6或armv7构build的话,这个文件不能在Mac OS X的命令行上执行。我的解决方法是为架构i386(也是iPhone模拟器所需的)构build一个mkdefs,并将其复制到lib / gvpr目录得到这个错误。 确保文件不能被覆盖并重新启动构build。

看起来链接器试图链接到Mac上安装的系统库。 这些库都将被编译为i386或x86_64,这是编译iPhone库时不起作用。 您需要重新configuration链接器以链接到iPhone SDK中的库。

还应该注意的是,你可能需要两次编译库 – 一次是armv6,另一次是armv7。 iPhone 3G和一些较旧的iPod Touch使用armv6架构,而较新的iPhone使用armv7架构。 在两种体系结构下编译库之后,可以使用lipo(在terminal中键入“man lipo”以获取更多信息),以创build一个具有两种体系结构的静态库。 如果您打算使用iPhone / iPad模拟器来开发您的应用程序,那么我也build议一次编译为i386,以便您可以在模拟器中使用您的库。 同样,lipo可以创build一个包含所有3个体系结构的静态库。

现在GraphViz网站似乎目前无法访问,所以我不能像下载那样下载库并运行configuration脚本,但是我怀疑在运行“make”之前,应该对生成的makefile进行以下更改由configuration脚本。 根据您所定位的iOS SDK版本以及您机器上的gcc版本,您可能需要调整以下一些更改,以便适合您的环境。 下面的说明将为armv6构build。 一旦你准备好解决这个架构,你将需要改变armv7的设置。

findCC = cc并将其更改为:CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2

在CFLAG中查找-arch i386并将其更改为:-arch armv6

findCFLAG并添加到BEGINNING !!:-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk

查找SHARED_LDFLAGS = -arch i386 -dynamiclib并将其更改为:SHARED_LDFLAGS = -arch armv6 -dynamiclib