Итак, у меня есть несколько разделяемых библиотек, которые я пытаюсь установить на своей системе Ubuntu, но у меня есть некоторые трудности с этим.общая библиотека не найдена во время компиляции
Я хочу установить библиотеки и заголовки в отдельной папке под /usr/local/lib
и /usr/local/include
(например, папка с именем agony
), так что это будет чистым и удаление их просто требую, чтобы я удалить эти папки. так это выглядит примерно так:
/usr/local/lib/agony/libbtiGPIO.so
/usr/local/lib/agony/libbtiDSP.so
...
/usr/local/include/agony/GPIO.h
/usr/local/include/agony/DSP.h
...
И я добавил файл здесь /etc/ld.so.conf.d/agony.conf
которые включают в себя строку, описывающую путь к папке библиотеки:
$ cat /etc/ld.so.conf.d/agony.conf
/usr/local/lib/agony
и я выполняю sudo ldconfig
обновить базу данных библиотеки. Так двойной проверки, если библиотека найдена я ldconfig -p | grep bti*
и я вижу следующий результат:
$ ldconfig -p | grep bti
...
libbtiGPIO.so (libc6,x86-64) => /usr/local/lib/agony/libbtiGPIO.so
libbtiDSP.so (libc6,x86-64) => /usr/local/lib/agony/libbtiDSP.so
...
В этот момент я должен быть в состоянии использовать библиотеки без указания пути к библиотеке. Но когда я пытаюсь скомпилировать приложение, не предоставляя путь к библиотеке (-L), он терпит неудачу. Однако, когда я поставляю gcc
с пути библиотеки экс:
gcc source.c -L /usr/local/lib/agony output -lbtiGPIO -lbtiDSP
это работает !!
Я не хочу использовать переменную окружения LD_LIBRARY_PATH
, потому что эта библиотека будет использоваться повсюду в системе, и я не хочу, чтобы другие компиляторы беспокоились о предоставлении LD_LIBRARY_PATH
.
Что я здесь делаю неправильно?
Спасибо, что освободил Майка. Поэтому, когда я устанавливаю стороннюю библиотеку, используя apt-get, например, она должна устанавливать общие библиотеки и где-то вроде '/ usr/lib', потому что я не указываю путь к библиотеке при использовании этих библиотек. Что, если имя сторонней библиотеки совпадает с именем другого в системе? Это кажется очень плохим дизайном от первого впечатления. – ArmenB
@ Bloody-Band-Aid Пакет не может попасть в фиды пакетов дистрибутива с тем же именем, что и предыдущий. Дистрибулятор управляет своим пространством имен пакетов. Если я устанавливаю исходный пакет, за пределами управления диспетчером пакетов, по умолчанию он будет устанавливать под '/ usr/local', вне пространства дистрибутива. Любая проблема, с которой я сталкиваюсь с неуправляемыми установками, - это полностью моя головная боль. Установка двух библиотек с тем же именем в один и тот же установочный префикс просто не может быть выполнена. Я мог бы установить их в разные установочные префиксы, '/ usr/local/fooA','/usr/local/fooB', но это было бы безумным. –