链接器兼容性和“用户代理”问题

  • ld.lld -v输出包含“与 GNU 链接器兼容”的消息,以解决GNU Libtool 使用的检测机制问题,此问题在软件兼容性和我们自己的“用户代理”问题中有描述。
  • 最新的m4/libtool.m4继续依赖GNU检查,如AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU lds only accept -v. case $LD -v 2>&1 </dev/null in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac])
  • 基于检查的配置是一个有价值的工具,可确保软件在未来仍能正常运行,但此示例突出了过于具体的检查如何导致意外后果。
  • Libtool 可利用-v来检查某些选项是否可用。
  • Meson 中mesonbuild/linkers/detect.py:guess_win_linker通过检查--version输出确定 LLD 调用是针对 ELF 还是 PE/COFF,但之前的检查过于严格,最新 Meson 已放宽检查,但链接器检测仍存在--target=未被考虑的问题。
  • Linux 内核的scripts/ld-version.sh脚本用于检测链接器版本,2014 年引入,最初用于检查与 GCC LTO 的 GNU ld 兼容性,后也可处理 LLD 版本,但处理含逗号后缀的版本有困难。
  • llvm-nm 和 llvm-objcopy 也声称与 GNU 兼容。
  • 探讨了 GNU ld 中-v-V--version的细微差异,之前ld.lld-V--version的别名导致某些目标使用gcc -v -fuse-ld=lld时出现问题,已调整为-V-v的别名。GCC 有类似-v--version行为,但无-V,Clang 的 GNU 驱动可模拟 GCC 4.2.1 并通过-fgnuc-version=更改版本。
阅读 15
0 条评论