交叉编译arm-linux-gnueabi-gcc的libcurl

shr*_*das 2 c++ linux curl

我一直试图从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
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用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.

Jos*_*ahm 5

我记得当我不得不交叉编译卷曲时......一天又一次!卷毛做的事情相当奇怪,但却很聪明.

如果你看那条线,你会看到:

typedef char
  __curl_rule_01__
    [CurlchkszEQ(long, CURL_SIZEOF_LONG)];
Run Code Online (Sandbox Code Playgroud)

如果你看看CurlchkszEQ,你会得到

#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1
Run Code Online (Sandbox Code Playgroud)

因此,这个例程强制执行sizeof(long) == CURL_SIZEOF_LONG,如果没有,它将在该数组初始化程序中放置一个负数,并导致构建失败.

这是交易,CURL_SIZEOF_LONG定义在curlbuild.h,它被定义为8...在x86_64机器上.也就是说,/usr/include/curl/curlbuild.h它被设置为8.你不关心x86_64!你正在编译arm ...一个32位的架构,其中sizeof(long) == 4,没有8CURL_SIZEOF_LONG不正确地设置为8!所以看起来你的编译器正在使用系统范围的x86_64 curl头文件,/usr/include/...而不是交叉编译器的头文件!(例如我的是/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
Run Code Online (Sandbox Code Playgroud)