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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [РЕШЕНО] Как изменить линковку программы без перекомпиляции?  (Прочитано 2261 раз)

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

Оффлайн Protopopulus

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Доброго времени суток.
Опишу задачу: Имеется скачанный с официального сайта firefox-3.6.10. Сама программа зависит от пары десятков библиотек, то есть:
(Нажмите, чтобы показать/скрыть)
Можно ли изменить такую вот линковку программы, не пересобирая ее из исходников? Надо, чтобы все эти библиотеки лежали в отдельной директории и чтобы firefox-bin был прилинкован к ним.
Подскажите пожалуйста в какую сторону копать :)
« Последнее редактирование: 20 Сентября 2010, 21:02:42 от Protopopulus »
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн __v1tos

  • Участник
  • *
  • Сообщений: 105
  • Ubuntuu 10.10 x86-64
    • Просмотр профиля
Не совсем понял суть проблемы, но разве нужно что либо делать с firefox-bin, загрузчик библиотек сам выполняет поиск и присоединяет библиотеки к программе. Я имею виду все библиотеки нужно скинуть в вашу папку и в переменных окружениях (наверное так) указать вашу папку, тогда загрузчик будет искать библиотеки и в вашей папке и /lib, /usr/lib и т.д
AMD Phenom II 945, GA-MA790GPT-UD3H (HD 3300), 5 GiB ram

Оффлайн Protopopulus

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
В том-то и беда, что по команде env не хочет показывать пути к либам. То есть, если я правильно понял, то эти пути указываются в программе?
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
LD_LIBRARY_PATH?

Оффлайн __v1tos

  • Участник
  • *
  • Сообщений: 105
  • Ubuntuu 10.10 x86-64
    • Просмотр профиля
По идее нет/

У меня:

vitaliy@vts64:~$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

vitaliy@vts64:~$ cat /etc/ld.so.conf.d/*.conf
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib32/alsa-lib
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu


Думаю в /etc/ld.so.conf.d/*.conf нужно внести папку


Пользователь решил продолжить мысль 18 Сентября 2010, 11:35:07:
LD_LIBRARY_PATH?

У меня пусто, я еще туда ничего не внес
AMD Phenom II 945, GA-MA790GPT-UD3H (HD 3300), 5 GiB ram

Оффлайн Protopopulus

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Да, похоже, что, все таки, LD_LIBRARY_PATH. Но где искать эту переменную? И как установить только для одной программы?
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн arrecck

  • Старожил
  • *
  • Сообщений: 1725
    • Просмотр профиля
LD_LIBRARY_PATH=./libs ./firefox-bin
те которые найдет в libs имеют приоритет, над теми которые будут в стандартных каталогах /usr
можете в файле firefox прописать

Оффлайн Protopopulus

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Ребят, то есть, если я сделаю:
#!/bin/bash
export LD_LIBRARY_PATH=/firefox/lib
....
firefox-bin
....
exit 0
то firefox-bin будет прилинкован к этим либам, а остальные программы будут игнорировать данную переменную? Или же эта переменная устанавливается для всех программ?
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Как изменить линковку программы без пере&
« Ответ #8 : 18 Сентября 2010, 12:40:00 »
Пример:
$ grep LD_LIBRARY_PATH /opt/gish/gish.desktop
Exec=bash -c "cd /opt/gish/gishdemo && env LD_LIBRARY_PATH=/opt/gish/gishdemo /opt/gish/gishdemo/gish"

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Почитайте
man ld.so
man ldconfig
и
man fork
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Protopopulus

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
После не очень продолжительного гуглежа, разобрался. Спасибо за подсказки и советы всем написавшим.

Для тех, кому интересно:

1. Директория с либами. Делем такой скрипт:
#!/bin/bash

export LD_LIBRARY_PATH=/путь/к_папке/с_либами

program # запускаем программу

exit 0

2. Файлы библиотек. Делаем такой скрипт:
#!/bin/bash

export LD_PRELOAD="/путь/lib1.so /путь/lib2.so /путь/libN.so"

program # запускаем программу

exit 0
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

 

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