2011-08-28 3 views
6

iOS 앱에 포함시키기 위해 Graphviz 용 정적 라이브러리를 빌드하려고하는데 작동하지 않습니다. 여기까지 내가 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 

I 모든 아키텍처 사양을 이해하지 못하므로이 기능을 사용하기위한 도움이 가장 환영받을 것입니다.

답변

0

링커가 Mac에 설치된 시스템 라이브러리에 연결하려고 시도하는 것 같습니다. 이러한 라이브러리는 i386 또는 x86_64 용으로 모두 컴파일 될 예정입니다.이 라이브러리는 iPhone 용 라이브러리를 컴파일 할 때 작동하지 않습니다. iPhone SDK에 들어있는 라이브러리에 링크하기 위해 링커를 다시 구성해야합니다.

또한 armv6으로 한 번, armv7로 다시 두 번 컴파일해야 할 것입니다. iPhone 3G와 이전 iPod Touches 중 일부는 armv6 아키텍처를 사용하지만 최신 iPhone은 armv7 아키텍처를 사용합니다. 두 아키텍처 모두에서 라이브러리를 컴파일 한 후에는 두 아키텍처가 모두 포함 된 단일 정적 라이브러리를 만들기 위해 lipo (자세한 내용은 터미널에 "man lipo"를 입력하십시오)를 사용할 수 있습니다. iPhone/iPad 시뮬레이터를 사용하여 앱을 개발하려는 경우 시뮬레이터와 함께 라이브러리를 사용할 수 있도록 i386으로 한 번 컴파일하는 것이 좋습니다. 다시 말하지만, lipo는 3 가지 아키텍처가 모두 포함 된 단일 정적 라이브러리를 만들 수 있습니다.

지금 GraphViz 웹 사이트에 연결할 수없는 것 같습니다. 따라서 라이브러리를 다운로드하고 구성 스크립트를 실행할 수는 없지만 "make"를 실행하기 전에 다음과 같이 변경해야합니다. configure 스크립트에 의해 만들어지는 makefile. 타겟팅중인 iOS SDK의 버전과 컴퓨터에있는 gcc의 버전에 따라 아래 변경 사항 중 일부를 사용자 환경에 맞게 변경해야 할 수도 있습니다. 아래 지침은 armv6에 대해 빌드됩니다. 해당 아키텍처를 다룰 준비가되면 armv7 용으로 빌드하도록 설정을 변경해야합니다. = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2

이 CFLAG에 -arch i386을을 찾아로 변경 CC :

찾기 CC = CC와로 변경 을 -arch의 ARMv6

는 CFLAG을 찾아 시작!에 추가 : 를 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk

찾기 SHARED_LDFLAGS = -arch i386을 -dynamiclib -isysroot 그것을 다음으로 변경하십시오 : SHARED_LDFLAGS = -arch armv6 -dynamiclib

+0

누군가가이 작동 여부를 확인할 수 있습니까? –

1

mkdefs가 작성된 후 빌드 프로세스 중에 mkdefs가 실행되는 문제가 있습니다. 따라서 armv6 또는 armv7 용으로 빌드하는 경우 파일을 Mac OS X의 명령 줄에서 실행할 수 없습니다. 해결 방법은 i386 아키텍처 (이는 iPhone 시뮬레이터에도 필요함) 용 mkdefs를 빌드하고 lib에 복사하는 것입니다/gvpr 디렉토리에 복사하십시오. 파일을 덮어 쓸 수 없도록하고 빌드를 다시 시작하십시오.

2

이 작업이 있습니다.빌드 스크립트는 x86 또는 x86_64 대신 i386 용으로 컴파일 되었기 때문에 실행 파일을 만들 때 끝에 실패하지만 모든 라이브러리는 잘 작성됩니다.

# 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를 확인하십시오. –

관련 문제