【问题标题】:Problem with mips assemblymips组装问题
【发布时间】:2009-09-10 06:48:09
【问题描述】:

我的 mips 端口有问题....每当我尝试使用 printf 语句编译 C 程序时,它都会发出警告说它无法识别,并且在生成的汇编文件中没有 .asciiz 指令...字符串不存在....谁能告诉我为什么?

以及构建裸机交叉编译器和交叉工具链之间的区别是什么

我是交叉编译器世界的新手....:-)

【问题讨论】:

  • 如果您可以发布一个重现问题的最小代码示例,这将有所帮助。我的猜测是您没有包含定义 printf 的头文件。 (此外,根据您的目标,在嵌入式环境中使用 printf 是一个相当昂贵的例程。您可能希望坚持使用 puts())

标签: c assembly embedded linker mips


【解决方案1】:

确保你有

#include <stdio.h>

在使用 printf 的 C 源文件的顶部。

【讨论】:

    【解决方案2】:

    以及构建裸机交叉编译器和交叉工具链之间的区别是什么

    交叉编译器(即 gcc )是交叉工具链的一部分。

    除了 gcc ,我们还需要

    • binutils(用于目标平台)
    • 内核(目标平台)
    • glibc(用于目标平台)

    查看this book了解详情。

    【讨论】:

    • 所以你的意思是交叉编译器工具链需要所有这些包,但裸机交叉编译器不需要?..还有一些在 gcc 讨论的地方我读到了一些人而不是 glibc建议我们使用 uclibc 或 newlib……这真的会有所作为吗???
    【解决方案3】:

    你是如何编译的? Eclipse 还是命令行?我在使用 Eclipse 时遇到了类似的问题,发现处理器系列在 Eclipse 中是“空的”。这导致汇编器无法理解编译器的输出,类似于您描述的症状。

    交叉编译器与普通编译器并没有什么不同:

    • 输出的二进制文件可能与构建计算机不兼容(可用于多个平台)
    • 编译器可以输出很多不同平台的代码

    如果是 GCC,它可能会加载一个或多个处理器系列。 Cygwin 附带的 GCC 非常有限(i686);在 Linux 中你会有更多的选择。我建议你提出一个不同的问题,关于如何设置你需要帮助的交叉编译。

    【讨论】:

    • 我想我构建了一个交叉编译器,但我不确定......我安装了 binutils 2.19,然后将 gcc 4.3.1 配置为 mips-linux-gnu 作为目标......然后使用了命令组装c文件并创建一个可执行文件..但我不确定我所做的是用于裸机交叉编译器..我应该如何找出?
    • 尽管使用了 -o 选项,但我还是忘记了添加,但我仍然没有生成任何文件?我无法理解为什么..
    • 我已经重新阅读了您的问题,如果它仅与 printf 有关,我怀疑它是否真的是(交叉)编译器问题。你能包括警告吗?您是否包含正确的文件?没有 #defines 在 printf 上处于活动状态?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多