Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Линкер не находит -lGLU  (Прочитано 2948 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Hi

  • Автор темы
  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
Линкер не находит -lGLU
« : 07 Апреля 2013, 08:23:35 »
Народ, подскажите, что-бы могла значить ошибка
gcc -m32 -lGLU test.c -o test
/usr/bin/ld: cannot find -lGLU
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
Без опции '-m32' компилируется без проблем. Очевидно, что не хватает какой-то 32-х битной библиотеки, совсем только не очевидно какой: libGLU1-mesa(i386), libGL1-mesa-glx(i386) и libGL1-mesa-dri(i386) у меня стоят, не знаю даже, на что еще и думать  :o

Оффлайн rayanAyar

  • Старожил
  • *
  • Сообщений: 1027
  • Да пребудет с вами совпавшая контрольная сумма
    • Просмотр профиля
Re: Линкер не находит -lGLU
« Ответ #1 : 07 Апреля 2013, 10:53:17 »
Может так?
gcc -m32 -L/usr/lib/i386-linux-gnu/ -lGLU test.c -o test

Оффлайн Hi

  • Автор темы
  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
Re: Линкер не находит -lGLU
« Ответ #2 : 07 Апреля 2013, 22:09:17 »
Может так?
gcc -m32 -L/usr/lib/i386-linux-gnu/ -lGLU test.c -o test
Спасибо, попробовалconstantine@constantine-N61Ja:~/Projects/wine-git/wine32$ gcc -m32 -L/usr/lib/i386-linux-gnu/ -lGLU test.c -o test
/usr/bin/ld: cannot find -lGLU
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
Не хочет :(
Заглянул в мануал gcc по опциям линкования и попробовал просто что-нибудь слинковать:constantine@constantine-N61Ja:~/Projects/wine-git/wine32$ cat test2.c
int librarytest(int count){return count++;}
constantine@constantine-N61Ja:~/Projects/wine-git/wine32$ gcc -m32 test2.c -c
constantine@constantine-N61Ja:~/Projects/wine-git/wine32$ gcc -m32 -L/home/constantine/Projects/wine-git/wine32/ test.c -o test
/tmp/ccUJknLA.o: In function `main':
test.c:(.text+0x10): undefined reference to `librarytest'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
constantine@constantine-N61Ja:~/Projects/wine-git/wine32$ gcc -m32 -L/home/constantine/Projects/wine-git/wine32/test2.o test.c -o test
/tmp/cc4HadnM.o: In function `main':
test.c:(.text+0x10): undefined reference to `librarytest'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
constantine@constantine-N61Ja:~/Projects/wine-git/wine32$ gcc -m32 -Xlinker test2.o test.c -o test
Последняя опция сработала, а, вот предыдущие две нет. Говоря по правде, я не знаю -- возможно линкер ищет файлы с определенными именами, например с префиксом libman ld ничего по этому поводу не нашел)? Но скажу более того -- можно сделать даже вот так:constantine@constantine-N61Ja:~/Projects/wine-git/wine32$ gcc -m32 -L/blahblahblah test.c -o test
/tmp/ccQXyBLw.o: In function `main':
test.c:(.text+0x10): undefined reference to `librarytest'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
Неочевидная с точки зрения линкера вещь: у меня нет директории /blahblahblah -- он же должен выдать ошибку, что не найдена директория?))

Напоследок пробовал еще так добавить библиотеку:constantine@constantine-N61Ja:~/Projects/wine-git/wine32$ gcc -m32 -ltest2.o test.c -o test
/usr/bin/ld: cannot find -ltest2.o
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
:idiot2: Мб в линкере баг?) Не знаю, что еще и думать.
« Последнее редактирование: 07 Апреля 2013, 22:19:13 от Hi »

Оффлайн Hi

  • Автор темы
  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
Re: Линкер не находит -lGLU
« Ответ #3 : 18 Апреля 2013, 11:03:53 »
Ага, я нашел, почему оно не компилируется! Оказывается при опции, например -lGLU, линкер ищет во всех стандартных директориях нечто, с префиксом lib, именем GLU и расширением .a или .so, т.е. libGLU.a и libGLU.so. Что бы он искал не только в стандартных директориях, можно дать еще одну опцией -L; так для нашего тестового примера решение выглядит так:constantine@constantine-N61Ja:~/Projects/wine-git/wine32$ gcc -m32 test2.c -c -o libtest2.so
constantine@constantine-N61Ja:~/Projects/wine-git/wine32$ gcc -m32 -L/home/constantine/Projects/wine-git/wine32/ -ltest2 test.c -o test
Самое забавное, что только после того, как до меня это дошло, я глянул снова в мануал, и обнаружил, вот же оно, это описание:
Цитировать
The linker searches a standard list of directories for the library, which is actually a file named liblibrary.a.
Я десятки раз пересматривал этот несчастный абзац и не видел, что написано у меня буквально под носом ;D

 

Страница сгенерирована за 0.031 секунд. Запросов: 26.