Не удалось найти -lGL, как обойтись без симлинка?

Я компилирую разделяемую библиотеку с -lGL в команде ld. Но он не может найти libGL.so в моей системе. Пакет Nvidia правильно указал путь к библиотекам в /etc/ld.so.conf.d/. Даже вывод ldconfig -p | grep libGL.so нашел это:

libGL.so.1 (libc6,x86-64) => /usr/lib/nvidia-current/libGL.so.1
libGL.so.1 (libc6) => /usr/lib32/nvidia-current/libGL.so.1
libGL.so (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/libGL.so
libGL.so (libc6,x86-64) => /usr/lib/nvidia-current/libGL.so
libGL.so (libc6, OS ABI: Linux 2.4.20) => /usr/lib32/libGL.so
libGL.so (libc6) => /usr/lib32/nvidia-current/libGL.so

Я почти везде читал, что для связи с ним у меня есть в основном 2 решения:

  1. Свяжите nvidia libGL.so со стандартным расположением /usr/lib. Это кажется неправильным для тех, кто попытается скомпилировать библиотеку opengl. Почему компоновщик не использует кеш ldconfig?

  2. Добавьте вручную -L/usr/lib/nvidia-current к пути поиска библиотеки. Опять же, неправильно, как я могу узнать каждый путь, по которому можно найти библиотеку во всей системе?

Итак, мой реальный вопрос: каков стандартный и автоматический подход для связывания с библиотекой не в стандартном месте, а в месте, уже зарегистрированном с помощью /etc/ld.so.conf?


person tito    schedule 15.12.2011    source источник
comment
Извините, я делаю расширение для Python. Удаление тега.   -  person tito    schedule 15.12.2011


Ответы (1)


/etc/ld.so.conf используется /lib/ld.so для разрешения общих библиотек во время выполнения, это не имеет ничего общего с компоновкой во время компиляции.

Что правильно сделать, так это просто связать libGL.so в /usr/lib/x86_64-linux-gnu/, и приложение будет использовать libGL.so nvidia во время выполнения. Это не должно быть проблемой, потому что интерфейс OpenGL стабилен, а символы в обеих библиотеках одинаковы, а реализация отличается.

person ismail    schedule 15.12.2011
comment
Итак, у меня стандартный Linux, я должен добавить себе -L/usr/lib/x86_64-linux-gnu? А на другой платформе? (32 бита и другие Linux?) Ничего общего? - person tito; 15.12.2011
comment
На обычной машине с Linux 32-битная версия находится в /usr/lib, а 64-битная версия — в /usr/lib64. - person ismail; 15.12.2011
comment
Да так, что этого недостаточно для автоматически найденной libGL (кстати, ее нет в /usr/lib32 и /usr/lib ?) - person tito; 15.12.2011
comment
Предполагается, что -L/usr/lib/x86_64-linux-gnu не нужен, поскольку Debian, использующий эту схему каталогов с несколькими библиотеками, должен был исправить свой компоновщик, чтобы он уже выполнял поиск там. Нет, вам нужен libGL.so в каталогах, которые ищет ваш компоновщик, и это обычно предоставляется пакетами Mesa(-devel). - person jørgensen; 15.12.2011