LINUX.ORG.RU

/usr/bin/ld: cannot find -lXext


0

0

Меня теперь даже ld посылает :( Просьба не смеяться слишком громко, обидно.

Взято из одного configure:

#include <stdio.h>
#ifdef STDC_HEADERS
# include <stdlib.h>
#endif

int
main ()
{
puts("hello Xext");
return 0;
}

должно компилиться "gcc -lXext -lX11 c.c", чтобы убедиться, что эти библиотеки
есть. Получаю ошибку:

/usr/bin/ld: cannot find -lXext
collect2: ld returned 1 exit status

Не знаю в чем тут дело. В кэше эти библиотеки есть, фактически файлы тоже
существуют (вместе со всеми своими символическими ссылками). Прописываю пути
полностью:

gcc -l /usr/X11R6/lib/libXext.so.6.4 -l /usr/X11R6/lib/libX11.so.6.2 c.c

Результат не меняется. Выполняю:

gcc -L /usr/X11R6/lib -lXext -lX11 c.c

Совсем не ясно:

/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status

Чё за херь? Может перезагрузица ???


Насколько понятно из man gcc:

-llibrary Use the library named library when linking.

The linker searches a standard list of directories for the li- brary, which is actually a file named `liblibrary.a'. The link- er then uses this file as if it had been specified precisely by name.

То есть, надо искать файл libX11.a (locate libX11.a, либо find / -name "libX11.a"). Хотя могу и ошибаться.

Можно также попробовать написать так:

gcc -lX11 -L /usr/X11R6/lib -lXext c.c

(поменять местами аргументы, первым поставить -lX11).

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

Но проблема-то вся в том, что нужна именно динамическая линковка библиотек.
Тем не менее попробовал со статической, как это ни покажется странным:

/usr/bin/ld: cannot find -l/usr/X11R6/lib/libXext.a
collect2: ld returned 1 exit status

Вижу сам, что случай весьма запутанный. Менять параметры местами тоже пробовал.
Реакции ровно никакой... Но ещё один момент, libXext.so и libX11.so находятся
в одной и той же директории! Как может меняться что-то при добавлении этой
самой директории с -L ???

Пощряются абсолютно любые коментарии.

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

у меня работает:

gcc -L /usr/X11R6/lib -lXext -lX11 c.c

ищи, что в системе напортил.

ps: а вот так: -l/usr/X11R6/lib/libXext.a не пиши. такого ld не понимает.

smartly ★★★
()

То, что я что-то в системе закосячил, я и сам понимаю. Потому как библиотеки линковать, вроде как знаю, но они не линкуются!? Странно именно то, что ни с какими другими пока проблем не возникало (эспериментировал немного, но было дело), при чём никаких. Хотелось бы вот только узнать, как это вообще возможно- то такое. Все библиотеки есть, а нужной libXext.so нету. И это не смотря на то, что не только сам файл существует, но он даже и в кэше-то числится! Может кто знает, как этот ld работает, и почему же он может не находить того, на что ему пальцем прямо показывают?

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

Странное дело...

Создал символическую ссылку на libX11.so.6 с именем libX11.so (оказыся тако не было) и выполнил ldconfig. Теперь

"gcc -lXext -L /usr/X11R6/lib -lX11 c.c"

и

"gcc -L /usr/X11R6/lib -lX11 -lXext c.c"

работают, но

"gcc -lXext -lX11 c.c"

нет. Более того работает

gcc -lX11 -L /usr/X11R6/lib -lXext c.c

и

gcc -lX11 -lXext -L /usr/X11R6/lib c.c

!!!

А

gcc -lX11 -lXext c.c

тем не менее пишет:

/usr/bin/ld: cannot find -lX11 collect2: ld returned 1 exit status

???

Это же ведь не нормально!? При условии, что в /etc/ld.so.conf есть строка "/usr/X11R6/lib" ! Ну как же так-то, мать честная?

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