On Tue, Mar 25, 2008 at 10:30:18PM +0300, panov@dec1.sinp.msu.ru wrote: > Здравствуйте всем! > > Я много лет пользовался Альтлинуксом > вместе с пакетом > научной ЦЕРНовской графики ROOT > (http://root.cern.ch), но начиная с > Desktop 4.0 пакет ROOT перестал компилиться. Я > сначала думал, что дело > в версии компилятора (т.е. gcc-4.1), так как > официально ROOT > поддерживает только до gcc-3.4. Но потом в > сети нашел > откомпилированную gcc-4.1 версию > (ftp://root.cern.ch/root/root_v5.12.00.linux-gcc-4.1.tar.gz). Дальше > я > установил у себя линукс Ubuntu-7.10, где тоже > основной компилятор > gcc-4.1, и проверил сам - ROOT компилится с gcc-4.1 > без проблем! > Значит, проблема в реализации > компилятора Альтлинукса. > > Я уж подумал было, буду работать в Ubuntu. Но > там оказалась очень > кривая русификация; emacs, без которого > жить не могу, тоже совсем > кривой. Надо разбираться с Альтлинуксом, > иначе жизни нет. > > Вот что происходит при компиляции ROOT'a в > Desktop 4.0 (это для > версии ROOT 5.18). Первая ошибка такая: > > cint/src/g__cfunc.c:50: ошибка: expected declaration specifiers or > '...' before numeric constant > cint/src/g__cfunc.c:50: ошибка: expected ')' before '!=' token > cint/src/g__cfunc.c:50: ошибка: expected ')' before '?' token > > Соответствющий фрагмент кода из файла > g__cfunc.c такой: > > 48 #if defined(G__ANSI) || defined(G__ANSIHEADER) > 49 int memcmp(const void *region1,const void *region2,size_t count); > 50 void* memcpy(void *region1,const void *region2,size_t n); > 51 #elif defined(_AIX) > > Здесь все ясно. В gcc-4.1 Альтлинукса > определен лишний макрос > 'memcpy', который пытается раскрыться где не > надо. Вставляю перед > этим фрагментом строчку: > > #undef memcpy // ERROR CORRECTION > > и компиляция продолжается дальше. До > следующего сообщения об ошибке: > > g++ -m32 -O2 -o bin/cint cint/main/cppmain.o \ > -Llib -lCint -lm -ldl -rdynamic > lib/libCint.so: undefined reference to `dlsym' > lib/libCint.so: undefined reference to `dlerror' > lib/libCint.so: undefined reference to `dlopen' > lib/libCint.so: undefined reference to `dlclose' > collect2: выполнение ld завершилось с кодом > возврата 1 > > Это уже хуже. Не извелекаются функции из > библиотеки libltdl, хотя > сама библиотека присутствует в /usr/lib > (файлы libltdl.a, > libltdl.so, libltdl.so.3, libltdl.so.3.1.4) lib/libCint.so собралась неправильно -- нужно чтобы она была слинкована с libdl. Видимо в ее строчке линковки не хватает -ldl. -- > Как можно определить использует ли провайдер transparent proxy или > нет? Очень просто. Только нужно понимать, как работает transparent proxy... -- at in community@