2012-05-09 108 views
4

我需要找出c程序執行過程中(運行時)可用(安裝在系統中)GCC版本(主要和次要)。意思是,編程提取可用gcc的版本(就像我在shell中並鍵入gcc --version,但在c程序中一樣)。運行時檢查GCC版本

__GNUC____GNUC_MINOR__僅在編譯時有用,我已經找到了gnu_get_libc_version()功能從gnu/libc_version.h,但它只是讓我的libc版本的不同,我需要的GCC版本。如果有什麼類似的海灣合作委員會這將是偉大的...

我真的想避免調用shell命令來做到這一點。

+6

你想所安裝的系統*,或用於編譯程序的編譯器編譯器*的版本? – NPE

+1

'gcc --version' –

+0

我想我想編譯器編譯的可執行文件... – aleroot

回答

7

用參數--version調用gcc shell命令;這是做到這一點的正確方法。請參閱popen()來做到這一點。

或者你也可以調用GCC來編譯一個打印__GNUC____GNUC_MINOR__的值的程序。但是,如果有問題的GCC被配置爲交叉編譯,那將不起作用。

替代將搜索版本字符串的二進制和希望你正確的,該格式不會改變,該版本字符串是不夠鮮明,爲您與足夠的信心識別它。

1.5字:不。

+1

「這是做這件事的正確方法」。號有*要做到這一點沒有*正確的方法,因爲這個問題是基於顯然僞造的假設。 –

4

我需要找出可用的(安裝在系統)版本的GCC(主要和次要)

你打算用這些信息做什麼?

你不能讓一個有意義的回答你的問題,因爲

  1. 用戶可能沒有安裝在/usr/bin
  2. 任何GCC可能對系統上的其他地方安裝了5個不同版本
  3. 可能有/usr/bin的版本滯銷需要gcc-X.Y,但實際上是gcc-Z.W,或Clang,或icc

但是,如果你堅持要一個毫無意義的答案,popen("gcc --version")和分析結果輸出。

+0

-1也許他有一個GCC安裝的列表;問題具體是:「如何確定GCC具有哪些版本」而不是「我如何找到所有不同的已安裝GCC」。 –

+0

爲什麼'popen'版本給出*無意義的答案*? – Wolf

10

有一個簡單的方法:

$ gcc -dumpversion 
4.6 
+1

請注意! – Offirmo