在iOS上使用curl,我无法链接到多个体系结构,CurlchkszEQ宏失败
我使用在GitHub上找到的精彩的“build_curl”脚本构建了许多版本的curl。我还使用其他技术重建了curl 但我总是以同样的问题结束 我有一个iOS项目,它链接到curl。我可以在模拟器上构建和调试(显然是使用i386)。我可以使用设备构建和调试,只要我选择只构建当前体系结构,并且在构建时插入设备 但是,如果我选择尝试构建发行版,或者如果我选择为没有插入设备的“iOS设备”构建调试。我总是会出现以下错误:在iOS上使用curl,我无法链接到多个体系结构,CurlchkszEQ宏失败,ios,xcode,curl,Ios,Xcode,Curl,我使用在GitHub上找到的精彩的“build_curl”脚本构建了许多版本的curl。我还使用其他技术重建了curl 但我总是以同样的问题结束 我有一个iOS项目,它链接到curl。我可以在模拟器上构建和调试(显然是使用i386)。我可以使用设备构建和调试,只要我选择只构建当前体系结构,并且在构建时插入设备 但是,如果我选择尝试构建发行版,或者如果我选择为没有插入设备的“iOS设备”构建调试。我总是会出现以下错误: curlrules.h:143:6: '__curl_rule_01__' d
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)];
这个定义存在于curlpuild.h中
#define CURL_SIZEOF_LONG 4
这应该是正确的,因为我正在构建一个32位的体系结构,然而,Xcode决定sizeof(long)!=4
,因此宏生成错误
我选择只为armv7和armv7s构建,但仍然会遇到这个错误
我不明白这为什么不能建立
我选择只为armv7和armv7s构建,但仍然会遇到这个错误
您是否查看了Xcode构建日志以确认只有-arch-armv7
和-arch-armv7
用于编译
您的问题当然与这样一个事实有关:即使您试图构建一个结合了armv7/v7s和arm64体系结构的fat可执行文件,您仍然使用一组头文件(例如为库的32位构建生成的头文件)
我想你应该参考一下。正如您所看到的,随附的curlbuild.h
标题包含特殊宏,用于区分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页面上的说明没有包含关于如何生成此标头的任何精确信息-我想说,它已被专门修改为跨平台兼容
更新
上面的链接已关闭(您可以在上找到快照-最新的预构建是从2015-01-08为libcurl 7.40.0制作的)。我复制了build libcurl ios.sh
和curlbuild.h
(为iOScURL
应用程序制作的一个方便的标题)
在armv7
生成build libcurl ios.sh
之后,生成生成的32位头的副本:
cp include/curl/curlbuild.h ~/Desktop/curlbuild32.h
在arm64
build之后也会发生同样的事情:
cp include/curl/curlbuild.h ~/Desktop/curlbuild64.h
最终的curlbuild.h
只不过是一个方便的版本,由于\ifdef\uuuu LP64\uu/*…*/#else/*…*/#endif
节。特别是,存在的差异不仅仅是CURL\u SIZEOF\u LONG
,例如:
#define CURL_TYPEOF_CURL_OFF_T int64_t /* 64-bit */
#define CURL_TYPEOF_CURL_OFF_T long /* 32-bit */
我不想讨论32位和64位头之间的每一个差异,而是这样做了:
include-32
和include-64
目录中my_curl.h
的头文件,如下所示:
#ifdef __LP64__
#include <include-64/curl/curl.h>
#else
#include <include-32/curl/curl.h>
#endif
\ifdef\uu LP64__
#包括
#否则
#包括
#恩迪夫
也许不是最优雅的解决方案,但它节省了我手工操作的时间(和出错的风险)。通过以上对curlbuild.h头文件的修改,使用Xcode 5.1,我现在可以在iOS上构建所有体系结构。它没有解释为什么以前版本的Xcode是为arm64构建的,而我在设置中明确排除了这一点,但由于所有体系结构现在都构建并工作了,我可以继续…嘿@arrtchiu我想尝试一下你的方法,但是你发布的链接断了。你知道我在哪里可以找到你使用的脚本吗?很抱歉延迟回复。我最终停止使用这种方法,转而使用一种更为集成的解决方案,名为hunter(),它负责处理这个问题。