LINUX.ORG.RU

Проблема с компиляцией KDE


0

0

Собираю кеду из исходников. kdelibs собралась и поставилась нормально, а kdebase при компиляции вылетела вот так:
/usr/X11R6/lib/libGL.a(glxcmds.o)(.text+0x2c63): In function `glxGetMscRateOML':
: undefined reference to 'XF86VidModeQueryVersion'
/usr/X11R6/lib/libGL.a(glxcmds.o)(.text+0x2c98): In function `glxGetMscRateOML':
: undefined reference to 'XF86VidModeGetModeLine'
collect2: ld returned 1 exit status
make[3]: *** [konq_sound.la] Ошибка 1
make[3]: Leaving directory '/tmp/kdebase-3.5.4/libkonq'
make[2]: *** [all-recursive] Ошибка 1
make[2]: Leaving directory '/tmp/kdebase-3.5.4/libkonq'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory '/tmp/kdebase-3.5.4'
make: *** [all] Ошибка 2

Кто-нибудь знает, что это и как бороться?

Проблема в библиотеке libGL.a. Отсутствует йункция XF86VidModeGetModeLine. У меня она в /usr/lib/libGL.so есть (а статической библиотеки libGL.a просто нет)

Попробуй такую тестовую программу:

void glxGetMscRateOML();

int main () { glxGetMscRateOML(); }

и потом cc test.c /usr/X11R6/lib/libGL.a

должна ту же ошибку выдать

anonymous
()
Ответ на: комментарий от anonymous

Сделал, как ты сказал. Это С? Никогда раньше не писал :-) Ругается уже на саму glxGetMscRateOML:

alex@darkstar:~$ cc test.c /usr/X11R6/lib/libGL.a /tmp/ccuOpfqP.o(.text+0x1d): In function `main': : undefined reference to `glxGetMscRateOML' collect2: ld returned 1 exit status

В libGL.a есть строки "XF86VidModeQueryVersion" и "XF86VidModeGetModeLine", упоминается и glxGetMscRateOML. Есть также /usr/lib/libGL.so.1.0.9629 - файл размером 555Kb и libGL.la, сгенерированный при установке драйвера NVidia. Просмотреть libGL.so.1.0.9629 не могу - там одна строчка текста и при выходе миднайтовского вьювера сообщение, что текста нет, так что понять, есть ли на самом деле там эта функция, не могу.

Что же делать? В компилируемых языках я как заяц в геометрии, так, общие представления.

danhuu
() автор топика

Если у вас стоят драйвера от nVidia, то файла /usr/X11R6/lib/libGL.a быть вообще не должно!

Переустановити их.

birdie ★★★★★
()
Ответ на: комментарий от birdie

На Слакварьном форуме вообще посоветовали временно снести драйвер, дескать, проприетарные драйвера - они такие! Хорошо, деинсталлятор честно возвращает систему в исходное состояние. Я посмотрел, исчез файл libGL.so.1.[версия драйвера] и симлинки на него из /usr/lib/, зато возник libGL.so.1.2 с симлинками в /usr/X11R6/lib, там же остался и libGL.a. Похоже, при компиляции идёт обращение к /usr/X11R6/lib/libGL.so, не найдя, лезет в libGl.a, отсюда и глюк. Запустил компиляцию, работал часа 3-4, затем вылетел, ругаясь на отсутствие /usr/lib/libGL.la, который был, пока драйвер стоял. Долго думал, потом сообразил опять поставить драйвер (действительно, после этого исчез libGL.a) и в /usr/X11R6/lib создать симлинк на "драйверский" /usr/lib/libGL.so.1. Драйвер пашет, иксы запускались нормально. Ушёл из иксов, запустил компиляцию, пока пашет (когда ругалась на libGL.a, вылетала минут через 5), пишу из links в другой консоли, а то с запущенными иксами компилирует раза в 3 дольше. Но вот ведь сволочи-драйверописцы, не могли в доке описать, что творится при установке!

danhuu
() автор топика
Ответ на: комментарий от danhuu

Установил kdebase, компилю kdebindings, возникает такая проблема:

/tmp/kdebindings-3.5.4/python/pykde/sip/kdeui/kkeydialog.sip: In function 'PyObject* convertFrom_IntDict(void*)':
/tmp/kdebindings-3.5.4/python/pykde/sip/kdeui/kkeydialog.sip:209: warning: taking address of temporary

Дальше ничего не происходит, проц бодро гудит час, два, три... надоело, похоже на бесконечный цикл. Лезу в соответствующий файл. Cтрока 209: 

 PyObject *a0 = sipMapCppToSelf (&it.currentKey (), sipClass_QCString);

Это часть вот такой функции:

%ConvertFromTypeCode
// Convert to a Python dictionary

    if (!sipCpp)
    return PyDict_New();

    PyObject *dict;

    // Create the dictionary.

    if ((dict = PyDict_New()) == NULL)
        return NULL;

    // Get it.

    QDict<int> qdict = *sipCpp;
    QDictIterator<int> it (qdict);

    while (it.current ())
    {
        PyObject *a0 = sipMapCppToSelf (&it.currentKey (), sipClass_QCString);
        PyObject *a1 = PyInt_FromLong ((long) it.current ());

        if ((a0 == NULL) || (a1 == NULL) || (PyDict_SetItem (dict, a0, a1) < 0))
        {
            Py_XDECREF (a0);
            Py_XDECREF (a1);
            Py_DECREF (dict);
            return NULL;
        }
    }

    return dict;
%End

Программеры, кто-нибудь знает, что тут не так?

danhuu
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.