【问题标题】:Linking an Unused Object File Breaks the Program链接未使用的目标文件会破坏程序
【发布时间】:2017-08-10 15:14:24
【问题描述】:

作为 gccMCUs 世界的新手,我看到了一种奇怪的行为,希望有人能帮助我。我可以毫无问题地为我的 armv7e-m 板 (CC3220S_LAUNCHXL) 创建和执行一个简单的应用程序。但是,当我链接一个未在任何地方引用且未引用任何其他代码的目标文件时,程序将停止在板上执行。没有编译或链接时错误;只是程序不起作用。

我的问题是链接一个未使用的目标文件会如何破坏程序的执行?

【问题讨论】:

    标签: gcc linker arm microcontroller object-files


    【解决方案1】:

    我的问题是链接一个未使用的目标文件会如何破坏程序的执行?

    许多种方式可能发生这种情况。示例:

    #include <stdio.h>
    int main()
    {
      puts("Hello!");
      return 0;
    }
    
    gcc t.c && ./a.out
    Hello!
    

    到目前为止,一切都按预期进行。现在有一些破损:

    // t1.c
    __attribute__((constructor))
    void fn() { abort(); }
    
    gcc -w -c t1.c && gcc t.c t1.o && ./a.out
    Aborted (core dumped)
    

    瞧:链接到程序的未引用 fn 会导致它在到达 main 之前死亡。

    只是程序不起作用。

    如果您详细说明“不起作用”的具体含义,并自行进行一些调试,您可能会得到更有用的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-01
      • 2011-05-08
      • 2013-12-02
      • 1970-01-01
      • 2021-10-11
      • 2014-10-10
      • 2011-06-08
      • 2015-12-02
      相关资源
      最近更新 更多