是否有(如果可能的标准)方法使用用户定义的属性<注释编译器输出(例如,对象file.o
,库file.a
或共享库libfile.so
) / em>,例如,包含json
字符串(嵌入在目标文件的某些部分中),其中包含对象的元数据:
例如:作为编译器(clang / gcc / dmd / ldc / gdc等),版本(例如:2.072),是否使用了c ++ 11,优化和编译器标志等。
例如:{"compiler" : "dmd", "version" : "2.072", "flags" : "-O -debug"}
用例:
链接器ld或其他一些用户定义的工具可以使用此元数据在尝试将多个属性不匹配的库链接在一起时提供信息性警告或错误(例如,当链接库与-std = c进行编译时++ 11与其他人在没有这个的情况下编译)
与通常难以调试的未定义符号错误相比,这将提供更加用户友好的错误消息,例如:对llvm::Twine::str[abi:cxx11]()
https://github.com/ldc-developers/ldc/issues/1928的未定义引用或由编译标志引起的其他错误不匹配(例如https://github.com/rejectedsoftware/vibe.d/issues/740#issuecomment-268039416中遗失-debug
)
使工具可以读取嵌入的元数据并找到最合适的匹配库,以便在有多个库可用时进行链接
注意:我唯一能找到的是https://gcc.gnu.org/onlinedocs/gccint/LTO-object-file-layout.html,但不确定这是否相关或我将如何编写(以及稍后阅读)此类用户定义的属性:
命令行选项(.gnu.lto_.opts):此部分包含用于生成目标文件的命令行选项