2012-05-09 2 views
4

Мне нужно найти доступную (установленную в системе) версию GCC (основная и второстепенная) внутри исполнения программы c (во время выполнения). Смысл, программно извлечь версию доступного gcc (так же, как если бы я был в оболочке и набрал gcc -version, но в c-программе).Проверить версию GCC во время выполнения

__GNUC__ и __GNUC_MINOR__ полезны только во время компиляции, и я нашел функцию gnu_get_libc_version() из gnu/libc_version.h, но это только получает мне версию LibC и мне нужна версия GCC. Если есть что-то подобное для GCC, было бы здорово ...

Мне бы очень хотелось избежать вызова команды оболочки для этого.

+6

Вы хотите версию компилятора *, который установлен на системе *, или компилятор, который использовался для компиляции программы? – NPE

+1

'gcc --version' –

+0

Я думаю, что я хочу, чтобы компилятор скомпилировал исполняемый файл ... – aleroot

ответ

7

Вызвать команду оболочки gcc с параметром --version; это правильный способ сделать это. См. popen().

Или вы можете вызвать GCC для компиляции программы, которая печатает значения для __GNUC__ и __GNUC_MINOR__. Но это не сработает, если заданный GCC настроен для кросс-компиляции.

Альтернативами было бы искать двоичные файлы для строк версии и надеяться, что вы получите правильный вариант, что формат не изменяется и что строка версии достаточно различна, чтобы вы могли ее распознать с достаточной уверенностью.

В 1,5 словах: Не используйте.

+1

«Это правильный способ сделать это». Нет. * Нет * правильный способ сделать это, потому что вопрос основан на явно ложных предположениях. –

4

Мне нужно выяснить, доступный (установлено в системе) GCC версии (мажорной и минорной)

Что вы собираетесь делать с информацией?

Вы не можете получить значимый ответ на ваш вопрос, потому что

  1. Пользователь не может быть любой GCC установлен в /usr/bin
  2. Может иметь 5 различные версии, установленные в других местах системы
  3. Может иметь версию в /usr/bin, которая pretentds будет gcc-X.Y, но на самом деле gcc-Z.W, или Clang или icc и т.д.

Но если вы настаиваете на том, чтобы не значащий ответ, popen("gcc --version") и проанализировать полученный результат.

+0

-1 Может быть, у него есть список, который GCCs установлен; вопрос конкретно: «Как определить, какие версии имеют GCC», а не «Как найти все разные установленные GCC». –

+0

Почему версия 'popen' дает * бессмысленный ответ *? – Wolf

10

Существует простой способ:

$ gcc -dumpversion 
4.6 
+1

Пожалуйста, поддержите! – Offirmo

Смежные вопросы