【问题标题】:Build GMP for iOS为 iOS 构建 GMP
【发布时间】:2023-04-23 07:13:01
【问题描述】:

我需要在我正在开发的 iphone 程序中使用GMP,但我真的不知道从哪里开始。我知道我必须为设备构建一个版本,为模拟器构建一个版本,但我知道的就这么多。我试着环顾四周,但找不到太多东西。

这里有没有人为iphone 成功构建GMP,愿意指导我完成整个过程?

我看到了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 项目中)

这让我发疯了。任何人都可以帮忙吗?请记住,我完全是使用这些工具的菜鸟。

假设我得到帮助并且我可以完成这项工作。我如何着手将它变成一个适用于armv6armv7simulator(i386) 的框架?

提前致谢。

更新:如果其他人在这里遇到问题,我是如何解决的。

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

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

  3. 使用 gmp.g 和 gmpgxx.h 将 .a 文件导入 XCode。

  4. 完成

【问题讨论】:

  • 我想通了。我现在有一个适用于模拟器(i386)和设备(armv6 和 armv7)的工作 GMP 库。我想知道我是否可以将 Android 开发的 armv6/7 部分与 NDK 一起使用。现在编写一个客观的 c 包装器,使其与 NSString 配合得很好。
  • 您可以(并且应该)发布您自己问题的答案并接受它。

标签: iphone ios ios5 gmp


【解决方案1】:

按照 rob 的建议,我将回答我的问题并接受答案。我是新手,所以如果有更简单的方法请原谅我,这就是我设法做到的。

要为 iphone 构建 GMP,您必须从命令行构建三个库 3 次。为 armv6、armv7 和 i386 架构构建。为确保 xcode 中没有问题,请确保将 -DNO_ASM 添加到 CPPFLAGS。获得三个 .a 文件后,将它们合并到一个库中。

您现在可以将使用 lipo 创建的库添加到 xcode 中并包含标头,您现在可以使用 GMP 进行 iphone 开发。

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

【讨论】:

  • 感谢您的回答,但您能否提供一个链接,以便下载可下载的库?我无法缝合以使其正常工作。谢谢!
  • 您是如何让交叉编译步骤适用于任何架构的?当我尝试时,我遇到了与您最初报告的相同的问题。
  • 在尝试交叉编译时,我总是遇到这个配置错误:“configure: error: Oops, mp_limb_t is 64 bits, but theassembler code in this configuration requires 32 bits.”跨度>
【解决方案2】:

您可能会受到这个针对 OpenSSL 的 bash script 的启发,并将其改编为 GMP。它使用标准的configure 脚本并使用 perl 替换 CC 和 CFLAGS。

【讨论】: