首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交叉编译libc for x86_64-linux-android

交叉编译libc for x86_64-linux-android
EN

Stack Overflow用户
提问于 2021-01-06 05:30:43
回答 1查看 192关注 0票数 1

我正在交叉编译(使用x86_64-linux-android-gcc)为x86_64-linux-android构建GNU libc,GLIBC version2.32。从strtod_l.c的编译中得到“__asm中的操作数约束不一致”的错误。在strtod_l.c中,有一个函数round_and_return(),它调用宏math_force_eval(force_underflow)。此宏在“at barriers.h”中定义,错误发生在以下行:

代码语言:javascript
复制
    __asm __volatile ("" : : "f" (x));

这让我开始尝试发现force_underflow的价值是什么:

尝试将这些行添加到strtod_l.c,但得到以下错误:

printf(“force_underflow=%f\n”,force_underflow);

错误:%f的类型为double,force_underflow的类型为long double

已尝试:

printf(“force_underflow=%lf\n”,force_underflow);

错误:%lf的类型为double,force_underflow的类型为long double

已尝试:

printf(“force_underflow=%Lf\n”,force_underflow);

错误:%Lf是long double类型,force_underflow是double类型

这就引出了我的第一个问题:变量"force_underflow“怎么可能同时是"double”类型和"long double“类型呢?这行代码中有没有什么东西:

代码语言:javascript
复制
   __asm __volatile("" : : "f" (x));

是否可以修改以满足编译器的要求?感谢您的任何/所有建议!

致敬,史蒂夫

EN

回答 1

Stack Overflow用户

发布于 2021-01-06 08:08:05

x86_64-linux-android-gcc不是一个适合编译glibc的编译器;它的目标是x86_64-linux-android ABI,而不是x86_64-linux-gnu ABI。为了编译glibc,你需要一个linux-gnu目标工具链。

我之前并不知道之前的ABI的细节,但从错误消息中,听起来x86安卓没有一个独特的long double表示,但它定义为与double相同的东西。但这只是使用错误目标编译器可能导致的多种形式的破坏之一。其他的破坏甚至可能是无声的。你只需要为你的目标构建合适的交叉工具链。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65586845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档