被链接的另一个目标文件是否会导致段错误,即使它没有在代码中使用?

Neo*_*ana 0 c++ segmentation-fault

我有一个段错误,只有在链接某个目标文件时才会发生。问题是,这个对象文件中包含的类没有在main()函数中使用,也没有包含头文件。

这个其他目标文件中的代码是否可能导致段错误?

Pet*_*ter 7

有各种各样的方式在链接中包含附加对象会导致程序出现故障。

几个常见的。

  1. 如果目标文件构造了一个静态对象,只需将它包含在链接中就会导致在程序中执行额外的代码。可能存在对象构造失败的直接问题,并引发异常。改变其他静态对象的构造顺序也可能产生间接影响——如果依赖于以特定顺序构造的这些对象,这将是有问题的。
  2. 链接目标文件意味着该目标文件中的所有符号都成为匹配这些符号在您的程序中使用的候选对象。例如,假设您的代码正在使用foo()从某个库命名的带有 C 链接的函数,并且附加对象还包含一个名为的函数foo(),该函数的行为与您的程序假设的行为不同。由于目标文件中的符号(通常)比链接库中的符号匹配性更强,因此可能会调用附加目标文件中的版本。
  3. 链接另一个对象可以改变程序在内存中的布局。如果您的程序的某些部分表现出未定义的行为并破坏了某些内存区域,则链接另一个对象的结果可能会改变该未定义行为的影响,因此使以前不可见的问题具有明显的症状(即被破坏的内存正在用于其他用途,症状变得可检测)。