2011-08-28 16 views
6

Tôi đang cố gắng xây dựng các thư viện tĩnh cho Graphviz để đưa chúng vào trong một ứng dụng iOS, nhưng tôi không thể làm cho nó hoạt động được. Dưới đây là những gì tôi đã làm cho đến nay, bằng cách sử dụng graphviz 2.28.0], Xcode 4.1, OSX 10.7 và tôi đang nhắm mục tiêu trình mô phỏng iOS.Xây dựng các thư viện Graphviz tĩnh cho iOS

tôi thấy Glen Low's configure instructions, và với một số phỏng đoán thông tin cập nhật này để:

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

này hoạt động, nhưng sau đó "làm cho" chạy trong một thời gian và sai sót với:

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 

tôi không hoàn toàn hiểu tất cả các thông số kiến ​​trúc, vì vậy bất kỳ trợ giúp nào để làm việc này được chào đón nhiều nhất.

Trả lời

0

Dường như liên kết đang cố gắng liên kết đến các thư viện hệ thống được cài đặt trên máy Mac của bạn. Những thư viện đó sẽ được biên dịch cho i386 hoặc x86_64, nó sẽ không hoạt động khi biên dịch thư viện cho iPhone. Bạn sẽ cần phải cấu hình lại trình liên kết để liên kết với các thư viện có trong SDK iPhone.

Cũng cần lưu ý rằng bạn có thể sẽ phải biên soạn thư viện hai lần - một lần như armv6 và một lần nữa là armv7. iPhone 3G và một số iPod Touch cũ hơn sử dụng kiến ​​trúc armv6, trong khi iPhone mới hơn sử dụng kiến ​​trúc armv7. Sau khi bạn đã biên dịch các thư viện trong cả hai kiến ​​trúc, bạn có thể sử dụng lipo (gõ "man lipo" trong Terminal của bạn để biết thêm thông tin) để tạo một thư viện tĩnh đơn với cả hai kiến ​​trúc trong đó. Nếu bạn định phát triển ứng dụng của mình bằng cách sử dụng trình mô phỏng iPhone/iPad, thì tôi cũng đề xuất biên dịch một lần là i386 để bạn có thể sử dụng thư viện của mình với trình mô phỏng. Một lần nữa, lipo có thể tạo một thư viện tĩnh đơn với tất cả 3 kiến ​​trúc trong đó.

Bây giờ trang web GraphViz có vẻ không thể truy cập được, vì vậy tôi không thể tải xuống thư viện và chạy tập lệnh cấu hình như bạn đã làm, nhưng tôi nghi ngờ rằng trước khi bạn chạy "make", bạn nên thực hiện các thay đổi sau makefile được tạo bởi kịch bản cấu hình. Tùy thuộc vào phiên bản iOS SDK bạn đang nhắm mục tiêu và phiên bản gcc nào bạn có trên máy của mình, bạn có thể phải tinh chỉnh một số thay đổi bên dưới để chúng phù hợp với môi trường của bạn. Các hướng dẫn dưới đây sẽ xây dựng cho armv6. Bạn sẽ cần phải thay đổi các thiết lập để xây dựng cho armv7 khi bạn đã sẵn sàng để giải quyết kiến ​​trúc đó.

Tìm CC = cc và thay đổi nó để: CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2

Tìm i386 -arch trong CFLAG và thay đổi nó để: -arch ARMv6

Tìm CFLAG và thêm vào đẦU !!: -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk

Tìm SHARED_LDFLAGS = -arch i386 -dynamiclib và đổi thành: SHARED_LDFLAGS = -arch armv6 -dynamiclib

+0

Ai đó có thể xác nhận xem tác phẩm này có hoạt động không? –

1

Sự cố là imo mkdef được thực thi trong quá trình xây dựng sau khi được tạo. Vì vậy, nếu bạn xây dựng cho armv6 hoặc armv7 các tập tin không thể được thực hiện trên dòng lệnh của Mac OS X. workaround của tôi là xây dựng một mkdefs cho kiến ​​trúc i386 (đó là cần thiết cho iPhone giả lập quá) và sao chép nó trong lib/gvpr thư mục sau khi nhận được lỗi này. Đảm bảo rằng tệp không thể ghi đè và khởi động lại bản dựng.

2

Tôi đã làm việc này.Các kịch bản xây dựng không thành công ở cuối khi nó đã cố gắng để thực hiện một thực thi vì nó được biên dịch cho i386 thay vì x86 hoặc x86_64 nhưng tất cả các thư viện xây dựng tốt.

# 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

vui lòng xem http://stackoverflow.com/questions/10941247/graphviz-for-ios-build-with-xcode-4-3-fails-with-ld-error dựa trên câu trả lời của bạn –