2012-03-01 98 views
6

我需要在我正在开发的iphone程序中使用GMP,但不知道从哪里开始。我知道我必须为该设备构建一个版本,并为该模拟器创建一个版本,但是我知道的情况如此。我试过四处寻找,但一直都找不到。构建适用于iOS的GMP

有没有人在这里成功地建立GMPiphone这将关心引导我通过这个过程?我看到Building GMP for iOS,但它不适合我。 我想我已经成功地使用内置的:

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

然后让安装。

/usr/local/lib我有libgmp.a。但是,当我拖到到xcode当我去编译它告诉我:

ignoring file /Users/daniel/Desktop/libgmp.a, file was built for archive which is not the architecture being linked (armv7)(我放弃在我的桌面出于某种原因,然后拖到了我的Xcode项目)

这是推动我坚果。谁能帮忙?请记住,我是一个完整的noob使用这些工具。

假设我得到了帮助,我可以完成这项工作。我该如何将其转变为可在armv6,armv7simulator(i386)上运行的框架?

在此先感谢。

UPDATE:如果任何人在这里有问题是我如何解决它。

  1. 首先交叉编译GMP 3次,架构设置为armv6。 armv7和i386。在构建arm版本时,将标志-DNO_ASM添加到CPPFLAGS。

  2. 查找LIPO三个.a文件一起

  3. 导入某文件与gmp.g和gmpgxx.h Xcode的。

+0

我想通了。我现在有一个可用于模拟器(i386)和设备(armv6和armv7)的工作GMP库。我想知道是否可以在NDK中使用Android开发的armv6/7部分。现在编写一个客观的C包装器,使其与NSString相得益彰。 – user1178964 2012-03-01 22:00:36

+4

您可以(也应该)发布自己问题的答案,并接受它。 – 2012-03-02 00:51:22

回答

6

正如抢劫的建议,我会回答我的问题,并接受了答案。我对此很陌生,所以如果有更简单的方式原谅我,这就是我管理的方式。

要为iphone构建GMP,您必须从命令行三次构建三个库。为armv6,armv7和i386架构构建。为确保xcode没有问题,请确保将-DNO_ASM添加到CPPFLAGS。一旦你有三个.a文件,将它们一起放入一个库中。

您现在可以将您用lipo创建的库添加到xcode中并包含头文件,您现在可以使用GMP为iPhone开发工作。

我希望这会有所帮助。我花了几天的时间试图弄清楚这一点。

+0

感谢您的答案,但你可以提供一个链接,所以donwloadable图书馆?我无法缝合来使它工作。谢谢! – doozMen 2013-01-29 19:39:01

+0

您是如何获得交叉编译步骤以适用于任何架构的?当我尝试它时,我遇到了与你最初报告相同的问题。 – hrabinowitz 2017-03-20 22:33:28

+0

当试图交叉编译时,我总是被这个配置错误困住:“configure:error:Oops,mp_limb_t是64位,但是这个配置中的汇编代码 需要32位。” – hrabinowitz 2017-03-20 22:40:03

0

对于OpenSSL,您可能受此bash script的启发,并将其改编为GMP。它使用标准的configure脚本并使用perl替代CC和CFLAGS。

相关问题