ios - 在 iOS 上使用 curl,我无法链接多个架构,CurlchkszEQ 宏失败

标签 ios xcode curl

我使用在 GitHub 上找到的精彩“build_curl”脚本构建了许多版本的 curl。我还使用其他技术重建了 curl。

但我总是遇到同样的问题。

我有一个链接到 curl 的 iOS 项目。我可以在模拟器上构建和调试(显然使用 i386)。只要我选择仅构建当前架构并且在构建时插入设备,我就可以使用设备进行构建和调试。

但是,如果我选择尝试构建 Release 或者如果我选择在没有插入设备的情况下为“iOS 设备”构建调试。我总是会遇到以下错误:

curlrules.h:143:6: '__curl_rule_01__' declared as an array with a negative size

这是由这个造成的:

#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1
typedef char
  __curl_rule_01__
    [CurlchkszEQ(long, CURL_SIZEOF_LONG)];

这个#define存在于curlbuild.h中

#define CURL_SIZEOF_LONG 4

这应该是正确的,因为我正在为 32 位架构构建,然而,Xcode 已决定 sizeof(long) != 4,因此宏会生成错误。

我已选择只为 armv7 和 armv7s 构建,但我仍然收到此错误。

我不明白为什么这不会构建。

最佳答案

I have chosen to only build for armv7 and armv7s, and still i get this error.

您是否查看了 Xcode 构建日志以确认只有 -arch armv7-arch armv7s用于编译?

您的问题肯定与您使用一组 header (例如为库的 32 位构建生成)这一事实有关,即使您尝试构建结合了 armv7/v7s 和 arm64 架构的胖可执行文件。

我想你应该引用Nick Zitzmann libcurl pre-built .如您所见curlbuild.h附带的 header 包括用于区分 ILP32 和 LP64 的临时宏:

/* The size of `long', as computed by sizeof. */
#ifdef __LP64__
#define CURL_SIZEOF_LONG 8
#else
#define CURL_SIZEOF_LONG 4
#endif

请注意,Nick 页面上的说明不包括有关如何生成此 header 的任何精确信息 - 我会说它已被专门修改为跨平台兼容。

更新

以上链接已关闭(可以在 Internet Archive 上找到快照 - 最新的预构建是从 2015 年 1 月 8 日开始为 libcurl 7.40.0 制作的)。我复制了一份(逐字)build-libcurl-ios.shcurlbuild.h (为 iOScURL 应用程序制作的单一、方便的标题)here .

armv7之后构建 build-libcurl-ios.sh复制生成的 32 位 header :

cp include/curl/curlbuild.h ~/Desktop/curlbuild32.h

arm64 之后同样的事情构建:

cp include/curl/curlbuild.h ~/Desktop/curlbuild64.h

决赛curlbuild.h由于#ifdef __LP64__ /* ... */ #else /* ... */ #endif,它只不过是一个包含 32 位和 64 位细节的方便版本部分。特别是不止有 CURL_SIZEOF_LONG差异,例如:

#define CURL_TYPEOF_CURL_OFF_T int64_t /* 64-bit */
#define CURL_TYPEOF_CURL_OFF_T long    /* 32-bit */

关于ios - 在 iOS 上使用 curl,我无法链接多个架构,CurlchkszEQ 宏失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21681954/

相关文章:

xcode - 在 XCode/swift 中检测应用程序崩溃

ios - 更新 TableViewController 中的 UI : Who's responsible- The table or cell?

powershell - 如何在 PowerShell 中将 curl 结果作为变量获取

php - 将 mysql 数组结果分配给 php 变量

json - 如何在elasticsearch中删除多个文档?

ios - fatal error : unexpectedly found nil while unwrapping an Optional value in Swift 3

iphone - 在加载另一个 ViewController 时呈现模态视图 Controller

iphone - XCode 编译器警告 : 'foo' may not respond to -bar

ios - 如何在 iOS 模拟器中模拟本地/推送通知?

ios - 如何检测 iOS 上按钮按下的坐标?