【问题标题】:Linking object files with struct accesses compiled on architectures with different alignment restrictions将目标文件与在具有不同对齐限制的体系结构上编译的结构访问链接
【发布时间】:2014-10-24 00:02:27
【问题描述】:

我被问到以下问题并被难住了:

当您尝试使用结构访问链接目标文件时,会发生什么情况?其中代码已针对相同的体系结构和指令集编译,但具有不同的对齐限制?结构体定义是一样的。

我觉得代码无法链接有几个原因:

  1. 可能违反对齐限制
  2. 一个对象文件结构访问的偏移量与其他对象不同

【问题讨论】:

    标签: c struct compilation linker


    【解决方案1】:

    有几种可能:

    1. 无害的:
      在这种情况下,不同的对齐限制是良性的,它们导致相同的最终布局。一切都好,结局好取决于您的类型,可能性不大。
    2. 编译器会保存此类信息,并在链接时检测到不匹配。
      不太可能,不确定是否有任何编译器这样做。
    3. 很有可能。
      代码将在没有警告或错误的情况下进行链接,但由于程序的不同部分对类型的布局方式有不同的想法,因此或多或少会出现异常。

    【讨论】:

      【解决方案2】:

      如果将结构保存到文件中或从文件中保存,我会建议会有深刻而可爱的错误,不一定在编译时。 (尽管可以强制单个结构对齐,尽管编译器项目设置是相同的(虽然并不容易)。)以任何方式跨库 - 然后在某些情况下 DLL 可以毫无问题地组合在一起。但是对于文件,这是一个问题,并且会产生不良行为。

      【讨论】:

        猜你喜欢
        • 2017-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        • 1970-01-01
        • 2020-11-23
        • 2019-03-16
        • 1970-01-01
        相关资源
        最近更新 更多