LINUX.ORG.RU

Помогите новичку


0

0

Доброго времени суток! Я решил научиться програмить под Linux и вот первые грабли. при попытке скомпилить программу использующию QT gcc ругаеться, что файлы библиотек(Xinerama, Xext и т.д.) не найдены. Хотя они лежат в /usr/X11R6/lib/ Что делать?

anonymous

указать gcc путь к библиотекам: -L/usr/X11R6/lib

anonymous
()

Указано так: -L/usr/X11R6/lib

anonymous
()

в смылсе путь указан, а все равно не компилиться.

anonymous
()

Спробуй:
-L/usr/X11R6/lib -lXinerama -lXext
и напиши сюда, что оно сказало - не своими словами, а cut'n'paste

Die-Hard ★★★★★
()

Вот чего он пишет:

/usr/bin/ld: cannot find -lXinerama collect2: ld returned 1 exit status make: *** [t1] Ошибка 1

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

Так не бывает :)

Что говорит
ls -l /usr/X11R6/lib/libXinerama*

Кусок мейкфайла с опциями?
Скорее всего, опция -L/usr/X11R6/lib "не поставилась".

Die-Hard ★★★★★
()

ls -l /usr/X11R6/lib/libXinerama* говорит вот что:

lrwxrwxrwx 1 root root 18 Июн 4 05:46 /usr/X11R6/lib/libXinerama.so.1 -> libXinerama.so.1.0 -rwxr-xr-x 1 root root 6764 Фев 6 20:54 /usr/X11R6/lib/libXinerama.so.1.0

anonymous
()

Попробовал сделать линк libXinerama.so на libXinerama.so.1

теперь эта библиотека находится, но другие нет. в чем теперь проблема? Не будешь же на все либы делать линки без цифр(т.е. просто .so)

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

> Не будешь же на все либы делать линки без цифр(т.е. просто .so)
Придется!


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

Насколько я понимаю, линкер (если не указаны опции static) ищет библиотеки так: сначала он пытается найти libxxx.so и прилинковать ее динамически, потом (если не нашел libxxx.so) он ищет libxxx.a и линкует статически.

Для работы программы, динамически слинкованной с некой libxxx.so.n, линк libxxx.so -> libxxx.so.n, вообще говоря, не нужен, поскольку библиотеки, как правило, имеют поле DT_SONAME, по которому загрузчик определяет имя файла библиотеки. Но для линковки линк libxxx.so -> libxxx.so.n необходим - иначе как линкер узнает, с чем ты хочешь линковать свою прогу?

Die-Hard ★★★★★
()

Спасбо за подсказку. Хотя с другой стороны почему в при установке пакета qt-devel эти линки не создаются?

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

При установке qt-devel выставляется линк libqt.so. Для того, чтобы правильно встали
Xinerama, Xext и т.д. надо, наверное, какой-нибудь X-devel ставить.

Die-Hard ★★★★★
()
Ответ на: комментарий от SadStork

ldconfig как раз сделает только те линки, которые необходимы для работы динамически слинкованных программ, а не для линковки. Например, если есть файл libXt.so.6.0, ldconfig проставит линк libXt.so.6 ->libXt.so.6.0, поскольку DT_SONAME в нем прописан как libXt.so.6. Чтобы -lXt находилась при линковке, над ручками проставить линк libXt.so -> libXt.so.6

Die-Hard ★★★★★
()

Смотрел пост-инстал скрипты в пакете -devel. фишка в том что там действительно запускается ldconfig, а команды создания линка нету.

anonymous
()

Дело в подключаемых библиотеках. Побавь в свойствах проекта соответствующий своим библиотекам ключ -l(**) при компиляции в g++. Еще будет полезно прочитать доки по g++..

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

anonymous (*) (2003-07-06 17:50:10.093943):
Типа, чукча не читатель, чукча - писатель?

Ты бы, для начала, прочитал, а потом советы давал;)

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

Еще будет очень полезно почитать сам вопрос и его обсуждение.

anonymous
()

Все, разобрался. При установке пакета -devel создаются линки(.so) на библиотеки. Большое спасибо Die-Hard.

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