【问题标题】:Program with scanf %m is not portable带有 scanf %m 的程序不可移植
【发布时间】:2014-01-06 18:51:49
【问题描述】:

我编写了一个 C 程序,它在我的机器上正确工作(即做它应该做的事情)。我将它移到另一台机器上,现在它没有按预期工作(即它没有崩溃,但它只是跳过了程序的整个部分)。我怀疑 scanf 的 %m 的使用,因为它是非标准的。注意我正在用 std=c99 编译我的 ptogram。我检查了我的机器和另一台机器上的 glibc 版本;它们分别是 (Ubuntu EGLIBC 2.13-20ubuntu5) 2.13(GNU libc) 2.14.1

有谁知道是 std 还是 glibc 版本有问题吗?

【问题讨论】:

  • 堆栈溢出经验法则#7:如果 OP 说“我的程序工作正常”,则 OP 的程序充满了可怕的未定义行为,并且 OP 希望每个人都猜到总是会出现的问题起来。
  • #1 显示一些代码。 #2 描述如何判断它“只是跳过程序的整个部分”
  • 你在两台机器上都用gcc编译吗?是同一个版本吗?
  • 你确定你没有错误地使用 glibc 吗?
  • 你在另一台机器上重建了吗?

标签: c cross-compiling glibc


【解决方案1】:

运行程序时,您需要一个与您正在使用的功能兼容的 libc。如果您使用的是非标准扩展,则需要检查目标平台的文档并确保它支持相同的扩展。

避免此类问题的最佳方法是避免使用扩展程序。通过坚持标准,您可以提高程序的可移植性。

另外,在每个平台上本地编译程序。不同平台之间的许多差异都在标准的#include 文件中处理,这意味着即使代码是可移植的,二进制文件通常也不是。

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多