Собств все оК только есть одна уж очень капризная програмуллина ей требуется для компиляции gcc 3.4 Можно ли поставить gcc 3.4 не ломая пол системы ? ( те есть ли собранные пакеты ) ?
В общем так:
1. сносишь gcc4
2. ставишь gcc от 3-й федоры (это как раз 3.4.3)
3. в usr/bin переименовываешь gcov, gcc, g++, i386-redhat-linux-gcc,
i386-redhat-linux-g++ в gcov34, gcc34, g++34, i386-redhat-linux-gcc44,
i386-redhat-linux-g++34
4. Обратно ставишь (не апдейт, а именно установка опцией -i) gcc от
федоры четвертой. Аналогично переименовываешь gcov, gcc, g++,
i386-redhat-linux-gcc, i386-redhat-linux-g++ в gcov40, gcc40, g++40,
i386-redhat-linux-gcc40, i386-redhat-linux-g++40
5. Симлинками делаешь gcc -> gcc34, g++ -> g++34, gcov -> gcov34
и так далее.
После этого gcc твой "вдруг" становится 3.4.3. А когда потом
понадобится 4.0.0 - перекинешь симлинка, и всех проблем. Я вообще
поступил еще проще - написал вот такую программку:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef VARIABLE_NAME
#define VARIABLE_NAME "GCCVERSION"
#endif
#ifndef DEFAULT_VERSION
#define DEFAULT_VERSION "40"
#endif
int main(int argc, char ** argv) {
char buf[128];
char exe[1024];
char ** args;
char * newexe;
int i;
memset(exe,0,1024);
sprintf(buf, "/proc/%d/exe", getpid());
readlink(buf,exe,1023);
args = (char**) malloc( sizeof(char*) * (argc+1) );
for (i=1;i<argc;i++) {
args[i] = argv[i];
}
args[argc] = NULL;
if (getenv(VARIABLE_NAME)) {
newexe = (char*) malloc( strlen(exe) + strlen(getenv(VARIABLE_NAME)) + 1);
strcpy(newexe,exe);
strcat(newexe,getenv(VARIABLE_NAME));
} else {
newexe = (char*) malloc( strlen(exe) + strlen(DEFAULT_VERSION) + 1 );
strcpy(newexe,exe);
strcat(newexe,DEFAULT_VERSION);
}
args[0] = exe;
return execv(newexe, args);
}
Собрал ее, а бинарники скопировал в /usr/bin/gcc, /usr/bin/gcov,
/usr/bin/g++, /usr/bin/i386-redhat-linux-gcc, /usr/bin/i386-redhat-linux-g++
В результате, если я говорю export GCCVERSION=40 и запущу gcc, то
запустится gcc 4.0, если указал export GCCVERSION=34 - то запустится
gcc 3.4 и так далее :-)
> Где принцып юниксовой простоты? Это же скриптом решается!
Скриптом это решается для только для тривиального случая :-) Например, предлагается из скрипта заставить запускаемый /usr/bin/gcc40 думать, что он /usr/bin/gcc. Или передать все параметры, когда один из них содержит пробел (число параметров неизвестно). Кроме того, такая программка работает априори на порядок быстрее скрипта - что опять же немаловажно, когда собираешь нечто из тысячи и более файлов.
P.S.: я полгода сидел на скрипте вида $0$GCCVERSION $@ - и на сишный враппер перешел не от хорошей жизни
поставь нужный компилер в любой каталог, раз уж очень надо..
тем более на один-два раза..
что-ж блин за привычка пошла у молодёжи, самим не попробовав,
ломить за советами..обленились что-ли.