在运行时检查GCC版本

5
我需要在c程序的运行时中找到系统中可用(已安装)的GCC版本(主版本和次版本)。也就是说,以编程方式提取可用gcc的版本(与在shell中键入gcc --version相同,但在c程序中)。
__GNUC__和__GNUC_MINOR__仅在编译时有用。我从gnu/libc_version.h中找到了gnu_get_libc_version()函数,但它只能获取libc版本,而我需要GCC版本。如果有类似于GCC的东西,那就太好了...
我真的很想避免调用shell命令来完成这个任务。

6
你是想要安装在系统上的编译器版本,还是用于编译你的程序的编译器版本? - NPE
我认为我需要编译可执行文件的编译器... - aleroot
1
但他已经有了答案... - Karoly Horvath
1
你为什么问这个问题?在运行时,你甚至不需要任何gcc编译器! - Basile Starynkevitch
3个回答

18

有一个简单的方法:

$ gcc -dumpversion
4.6

1
还有一个 -dumpfullversion 选项,可以输出完整的 GCC 版本信息。 - amaslenn

8

使用参数--version调用gcc shell命令是正确的方法。请参阅popen()执行此操作。

或者,您可以使用GCC编译程序,并打印__GNUC____GNUC_MINOR__的值。但如果所使用的GCC已配置为交叉编译,则此方法将不起作用。

另一种选择是在二进制文件中搜索版本字符串,并希望您获得正确的版本字符串,格式不会更改,并且版本字符串足够明显以便您有足够的信心进行识别。

简而言之:不要那样做。


2
“这是正确的做法”并不准确,因为问题基于明显错误的假设。 - Employed Russian

5
我需要查找系统中已安装的GCC版本(主要版本和次要版本)。 您打算用这些信息做什么? 您无法得到一个有意义的答案,因为: 1.用户可能在/usr/bin中没有安装任何GCC; 2.在系统中其他地方可能安装有5个不同的版本; 3.可能有一个版本在/usr/bin中,它“假装”是gcc-X.Y,但实际上是gcc-Z.W、Clang或icc等。 但是,如果您坚持要得到一个毫无意义的答案,可以使用“popen(“gcc--version”)”并解析输出结果。

也许他有一个已安装GCC列表;问题是具体如下:“我该如何确定GCC的哪些版本”,而不是“如何找到所有不同的已安装GCC”。 - Aaron Digulla
为什么 popen 版本会给出一个 无意义的答案 - Wolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接