【问题标题】:cross compiling for arm math交叉编译手臂数学
【发布时间】:2021-12-17 18:16:02
【问题描述】:

我目前有一个问题 - 如果我编写程序并在 main 中使用 sqrt 并在编译时使用 arm-linux-gnueabi-gcc program.c -o prog-arm -lm 我没有问题(-lm 用于链接数学)。

所以sqrt (25) 会在最后打印 5

但是如果我从 main 调用另一个函数,例如:

fkt (int a) {
  int x = sqrt (a);
  return x;
}
int main () {
  int b = fkt (25);
  printf ("% d", b);
  return 0;
}

arm-linux-gnueabi-gcc program.c -o prog-arm -lm 输出的是 25 而不是 5。没有编译错误。

【问题讨论】:

  • 欢迎来到 StackOverflow!请以文本形式发布Minimal Reproducible Example,最短的完整代码,显示您已尝试过的内容。最好的方法是复制/粘贴,在您检查它确实表现出所描述的行为之后。
  • fkt 返回一个 int 并且它没有返回类型。是不是笔误?
  • 可能没有编译器错误,但到处都有多个警告。警告不是意味着“这是一个您可以选择修复的外观问题”,而是“这是一个可能会阻止您的程序按预期工作的错误”。见What must a C compiler do when it finds an error?
  • 你的program.c有#include <math.h>#include <stdio.h>吗?此外,fkt 的返回类型应显式声明。隐式 int 在 1999 版 C 标准中被删除。
  • 啊,是的,缺少包含实际上可能是这个错误的完美解释。

标签: c cross-compiling


【解决方案1】:

尝试使用arm-linux-gnueabihf-gcc 由于编译器是底层库(据我所知),因此编译有点不同。更多主题:Difference between arm-eabi arm-gnueabi and gnueabi-hf compilers

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2018-08-21
  • 2015-04-17
  • 2011-03-13
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多