2012-03-01 41 views
6

Tôi cần sử dụng GMP trong chương trình iphone tôi đang làm việc, nhưng không thực sự biết bắt đầu từ đâu. Tôi biết rằng tôi phải xây dựng một phiên bản cho thiết bị và một phiên bản cho trình mô phỏng, nhưng đó là nhiều như tôi biết. Tôi đã thử nhìn xung quanh nhưng không thể tìm thấy nhiều.Xây dựng GMP cho iOS

Có ai ở đây xây dựng thành công GMP cho iphone có thể hướng dẫn tôi qua quy trình không?

Tôi thấy Building GMP for iOS nhưng nó không hoạt động đối với tôi. tôi nghĩ rằng tôi đã xây dựng nó bằng cách sử thành công:

./configure CC="/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2" CXX="/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-g++-4.2" CPP="/Developer/Platforms/iPhoneOS.platform/Developer/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2 -E" LD="$IOS/usr/bin/ld" CPPFLAGS="-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -miphoneos-version-min=4.2" AR="$IOS/usr/bin/ar" NM="$IOS/usr/bin/nm" NMEDIT="$IOS/usr/bin/nmedit" LIBTOOL="$IOS/usr/bin/libtool" LIPO="$IOS/usr/bin/lipo" OTOOL="$IOS/usr/bin/otool" RANLIB="$IOS/usr/bin/ranlib" STRIP="$IOS/usr/bin/strip" --disable-shared --enable-static --prefix=$IOS/usr/local --host=none-apple-darwin10

Sau đó thực hiện cài đặt.

Trong /usr/local/lib Tôi có libgmp.a. Nhưng khi tôi kéo đến để xcode khi tôi đi để biên dịch nó nói với tôi:

ignoring file /Users/daniel/Desktop/libgmp.a, file was built for archive which is not the architecture being linked (armv7) (Anh đã đánh rơi trong máy tính để bàn của tôi đối với một số lý do, sau đó kéo vào vào dự án xcode của tôi)

này được lái xe cho tôi hạt. Có ai giúp được không? Ghi nhớ tôi là một noob hoàn chỉnh bằng cách sử dụng những công cụ này.

Giả sử tôi nhận được sự trợ giúp và tôi có thể thực hiện công việc này. Làm thế nào để tôi chuyển nó thành một khung làm việc trên armv6, armv7simulator(i386)?

Xin cảm ơn trước.

Dan

CẬP NHẬT: Nếu có ai khác có vấn đề ở đây là cách tôi giải quyết.

  1. Biên dịch chéo đầu tiên GMP 3 lần, đặt kiến ​​trúc thành armv6. armv7 và i386 tương ứng. Khi xây dựng các phiên bản cánh tay, hãy thêm cờ -DNO_ASM vào CPPFLAGS.

  2. Tìm LIPO ba file .a cùng

  3. nhập tập tin .a để Xcode với gmp.g và gmpgxx.h.

  4. Xong

+0

Tôi đã tìm ra. Tôi bây giờ có một thư viện GMP làm việc mà làm việc cho các mô phỏng (i386) và các thiết bị (armv6 & armv7). Tôi tự hỏi liệu tôi có thể sử dụng phần armv6/7 của phát triển Android với NDK hay không. Bây giờ để viết một wrapper c mục tiêu để làm cho nó chơi tốt đẹp với NSString. – user1178964

+4

Bạn có thể (và nên) đăng câu trả lời cho câu hỏi của riêng bạn và chấp nhận câu hỏi đó. –

Trả lời

6

Theo đề nghị của cướp, tôi sẽ trả lời câu hỏi của tôi và chấp nhận câu trả lời. Tôi mới đến đây, vì vậy nếu có một cách dễ dàng hơn tha thứ cho tôi, đây là cách tôi quản lý làm điều đó.

Để xây dựng GMP cho iphone, bạn phải xây dựng ba thư viện từ dòng lệnh ba lần. Xây dựng cho kiến ​​trúc armv6, armv7 và i386. Để đảm bảo không có vấn đề gì trong xcode, hãy đảm bảo bạn thêm -DNO_ASM vào CPPFLAGS. Khi bạn có ba tệp .a, hãy kết hợp chúng lại với nhau thành một thư viện.

Bây giờ bạn có thể thêm thư viện bạn đã tạo bằng lipo vào xcode và bao gồm các tiêu đề, bây giờ bạn có GMP làm việc để phát triển iphone.

Tôi hy vọng điều này sẽ hữu ích. Tôi đã dành một vài ngày cố gắng tìm ra điều này.

+0

Cảm ơn bạn đã trả lời nhưng bạn có thể cung cấp liên kết để các thư viện không thể tải được không? Tôi không thể seam để làm cho nó hoạt động. Cảm ơn! – doozMen

+0

Làm cách nào để bạn có được bước biên dịch chéo để làm việc cho bất kỳ kiến ​​trúc nào? Khi tôi thử nó, tôi nhận được cùng một vấn đề mà bạn đã báo cáo ban đầu. – hrabinowitz

+0

Khi cố gắng biên dịch chéo, tôi luôn gặp khó khăn với lỗi cấu hình này: "cấu hình: lỗi: Rất tiếc, mp_limb_t là 64 bit, nhưng mã lắp ráp trong cấu hình này dự kiến ​​32 bit". – hrabinowitz

0

Bạn có thể được lấy cảm hứng từ điều này bash script cho OpenSSL và điều chỉnh nó cho GMP. Nó sử dụng kịch bản tiêu chuẩn configure và thay thế CC và CFLAGS bằng cách sử dụng perl.

Các vấn đề liên quan