为iOS构建静态Graphviz库

ben*_*604 8 objective-c graphviz ios4 ios

我正在尝试为Graphviz构建静态库,将它们包含在iOS应用程序中,但我无法让它工作.这是我到目前为止所做的,使用graphviz 2.28.0],Xcode 4.1,OSX 10.7,我的目标是iOS模拟器.

我找到了Glen Low的配置说明,并通过一些明智的猜测将这些更新为:

./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"
Run Code Online (Sandbox Code Playgroud)

这有效,但随后"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
Run Code Online (Sandbox Code Playgroud)

我不太了解所有的架构规范,因此欢迎任何帮助实现这一点.

Car*_*ter 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

在CFLAG中找到-arch i386,修改为:-arch armv6

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

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