从对象或库文件中识别C ++的版本例如c ++ 11,c ++ 14

问题描述

我想知道GNU或LLVM工具链中是否有任何工具可以帮助从对象或库中获取c ++版本信息?

解决方法

我刚刚用一个简单的.o文件进行了测试,该文件包含以下代码的编译版本:

#include <iostream>

void test()
{
    std::cout << "Hello\n";
}

我使用以下命令对其进行了编译:

for std in 03 11 14 17; do g++ test.cpp -std=c++$std -c -o test$std.o; done

现在我检查了生成的目标文件的SHA1总和

$ sha1sum test*.o
f4805c820db889327a90c823f3515baed1f443dc  test03.o
2437e0d7aaf2dcf0575eff1237cad70ebef06448  test11.o
2437e0d7aaf2dcf0575eff1237cad70ebef06448  test14.o
f4805c820db889327a90c823f3515baed1f443dc  test17.o

如您所见,C ++ 03与C ++ 17以及C ++ 11与C ++ 14的目标文件是相同的。因此,除非您使用一些特殊的选项(我不知道这些选项)来编译代码,否则没有通用的方法来区分这些代码。