问题描述
我想知道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的目标文件是相同的。因此,除非您使用一些特殊的选项(我不知道这些选项)来编译代码,否则没有通用的方法来区分这些代码。