Курсовая работа: Разработка статических и динамических библиотек на языке программирования С/C++ в операционных системах UNIX

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

olya:~#

Как видите все правильно. Программа использует три библиотеки:

libc.so.6 - стандартную библиотеку функций языка C++ .

ld-linux.so.2 - библиотеку динамической линковки программ ELF формата.

libfsdyn.so - нашу динамическую библиотеку функций.

Нашу библиотеку она найти не может. И правильно! Динамический линковщик ищет библиотеки только в известных ему каталогах, а каталог нашей программы ему явно не известен.

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

olya:~# cat /etc/ld.so.conf

/usr/X11R6/lib

/usr/i386-slackware-linux/lib

/usr/i386-slackware-linux-gnulibc1/lib

/usr/i386-slackware-linux-gnuaout/lib

olya:~#

Во всех этих директории хранятся всеми используемые библиотеки. В этом списке нет лишь одной директории - /lib , которая сама по себе не нуждается в описании, так как она является главной. Получается, что наша библиотека станет "заметной", если поместить ее в один их этих каталогов, либо отдельно описать в отдельном каталоге. Давайте для теста опишем, добавим строку в конец файла ld.so.conf :

/root

У меня этот файл находится в домашнем каталога пользователя root, у Вас он может быть в другом месте. Теперь после этого динамический линковщик будет знать где можно найти наш файл, но после изменения конфигурационного файла ld.so.conf необходимо, чтобы система перечитала настройки заново. Это делает программа ldconfig . Пробуем запустить нашу программу:

olya:~# ldconfig

olya:~# ./rezultdyn

f1() = 25

f2() = 10

olya:~#

Как видите все заработало. Если теперь удалить добавленную нами строку и снова запустите ldconfig , то данные о расположении нашей библиотеки исчезнут и будет появляться таже самая ошибка.

Но описанный метод влияет на всю систему в целом и требует доступа администратора системы, т.е. root . А если Вы простой пользователь без сверх возможностей ?!

Для такого случая есть другое безболезненное решение. Это использование специальной переменной среды LD_LIBRARY_PATH , в которой перечисляются все каталоги содержащие пользовательские динамические библиотеки. Для того, чтобы установить эту переменную в командной среде bash надо набрать всего несколько команд. Для начала посмотрим есть ли у нас такая переменная среды:

olya:~# echo $LD_LIBRARY_PATH

У меня в ответ выводится пустая строка, означающая, что такой переменной среды нет. Устанавливается она следующим образом:

olya:~# LD_LIBRARY_PATH=/root

olya:~# export LD_LIBRARY_PATH

К-во Просмотров: 354
Бесплатно скачать Курсовая работа: Разработка статических и динамических библиотек на языке программирования С/C++ в операционных системах UNIX