gpt4 book ai didi

c++ - 为 arm-linux-gnueabi-gcc 交叉编译 libcurl

转载 作者:太空狗 更新时间:2023-10-29 11:36:28 32 4
gpt4 key购买 nike

我一直在尝试从 ubuntu eclipse 交叉编译 libcurl 7.35.0 for arm-linux-gnueabi-gcc++。我在 GCC++ 链接器中包含了 -lcurl optons。当我尝试在 G++ 编译器中为以下代码编译代码时,一切进展顺利,构建后没有错误。

#include <iostream>
#include <curl/curl.h>
using namespace std;

int main()
{
return
}

但是当我尝试使用 arm-linux-gnueabi-gcc++ 进行交叉编译但尝试构建时会产生编译错误:

/usr/include/curl/curlrules.h:143:41: 错误:数组“curl_rule_01”的大小为负/usr/include/curl/curlrules.h:153:53: 错误:数组‘curl_rule_02’的大小为负数

请帮助我指导如何为 ARM 交叉编译 libcurl。

最佳答案

我还记得以前我不得不交叉编译 curl 的时候……多棒的一天啊! curl 所做的事情相当奇怪,但很聪明。

如果你看那一行你会看到:

typedef char
__curl_rule_01__
[CurlchkszEQ(long, CURL_SIZEOF_LONG)];

如果您查看 CurlchkszEQ,您会得到

#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1

因此此例程强制执行 sizeof(long) == CURL_SIZEOF_LONG,如果不执行,它将在该数组初始值设定项中放入负数并导致构建失败。

事情是这样的,CURL_SIZEOF_LONGcurlbuild.h 中定义,在 x86_64 机器上定义为 8...。也就是说,在 /usr/include/curl/curlbuild.h 中它被设置为 8。不过你不关心 x86_64!您正在为 arm 编译...一个 32 位架构,其中 sizeof(long) == 4 而不是 8 并且 CURL_SIZEOF_LONG 不正确设置为 8!因此,您的编译器似乎正在系统范围内拾取 /usr/include/... 处的 x86_64 curl 头文件,而不是交叉编译器的头文件! (例如,我的在 /opt/cross/arm-unknown-linux-gnueabi/include/... 中,但你的可能不在)。

因此,在编译时,编译器会解析 sizeof(long) == 4 != CURL_SIZEOF_LONG 并正确崩溃。理论上解决这个问题的方法很简单,只需更改编译器中的配置以使用交叉编译器包含。在 Eclipse 中,我不确定如何去做,尽管我确信这是可能的。

您可能会发现像这样从终端构建 curl 会更容易:

curl $ ./configure --host=arm-linux-gnueabi --prefix=/path/to/your/arm-linux-gnueabi/arm-linux-gnueabi
... configure stuff ...
curl $ make && make install

关于c++ - 为 arm-linux-gnueabi-gcc 交叉编译 libcurl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32732753/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com