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


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

Автор Тема: qt4.4 + Динамическая линковка  (Прочитано 3181 раз)

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

Оффлайн SauronTheDark

  • Автор темы
  • Активист
  • *
  • Сообщений: 674
    • Просмотр профиля
qt4.4 + Динамическая линковка
« : 30 Ноября 2008, 19:16:23 »
Есть главный проект и к нему ряд субпроектов в виде либ. Проблема состоит в том, что если добавлять в проект либу при помощи
LIBS += -lmy_lib то ld пытается её искать в /usr/lib/qt причем даже если я её туда кладу, то он её не находит, если я жёстко задаю путь до либы при помощи -L тогда бинарник лается, что не может найти требуемую библиотеку libmy_lib.so.1 not found
куда копать уже просто незнаю((

forumreader

  • Гость
Re: qt4.4 + Динамическая линковка
« Ответ #1 : 01 Декабря 2008, 03:24:25 »
Переменные окружения

Оффлайн Holy Cheater

  • Любитель
  • *
  • Сообщений: 52
  • His Holiness
    • Просмотр профиля
Re: qt4.4 + Динамическая линковка
« Ответ #2 : 01 Декабря 2008, 07:14:47 »
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1
Если либа qt-шная, то там линкается и без pkg-config (свой формат).

А вообще через LIBS += -L/some/library/path -lmylib должно линкаться.

Оффлайн SauronTheDark

  • Автор темы
  • Активист
  • *
  • Сообщений: 674
    • Просмотр профиля
Re: qt4.4 + Динамическая линковка
« Ответ #3 : 01 Декабря 2008, 12:27:27 »
Дык либы же самописные, вторым способом линкуется, но при запуске либу не находит. Причем статически всё линкуется, в винде тоже прекрасно он либы видит, а тут ни в какую
« Последнее редактирование: 01 Декабря 2008, 12:30:12 от SauronTheDark »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: qt4.4 + Динамическая линковка
« Ответ #4 : 02 Декабря 2008, 13:13:56 »
Попробуй дописать еще -Wl,-rpath /path/to/lib
Например так линкуется Matlab
-L/opt/matlab/bin/glnx86 -Wl,-rpath /usr/lib -Wl,-rpath /opt/matlab/bin/glnx86 -leng -lmx

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: qt4.4 + Динамическая линковка
« Ответ #5 : 02 Декабря 2008, 16:21:36 »
Дык либы же самописные, вторым способом линкуется, но при запуске либу не находит.

Так загрузчик ищет динамические библиотеки только в определенных путях.
Их надо прописывать либо в /etc/ld.so.conf с последующим запуском sudo ldconfig (это один раз и навсегда),
либо в переменной окружения LD_LIBRARY_PATH

Либо библиотеки класть сразу в /usr/lib

$ ldd имя_библиотеки_или_исполняемого_файла
покажет, какие библиотеки требуются, и откуда в системе они берутся.

Я думаю, еще strace должен показать, куда загрузчик лезет за библиотеками, но точно не уверен.

Попробуй дописать еще -Wl,-rpath /path/to/lib
А это жесткое задание пути к библиотеке, имхо, моветон.
http://en.wikipedia.org/wiki/Rpath_(linking)

« Последнее редактирование: 02 Декабря 2008, 16:32:17 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн SauronTheDark

  • Автор темы
  • Активист
  • *
  • Сообщений: 674
    • Просмотр профиля
Re: qt4.4 + Динамическая линковка
« Ответ #6 : 02 Декабря 2008, 18:55:42 »
Понятно, но я пока разрабатываю всё это дело, решил статически всё линковать. Вопросец такой, ежели я слинкую при помощи -L$$PDW -lmylib прогу с либой, которая лежит где нить в хомяке, а потом либу перепишу в /usr/lib то прога станет её видеть?

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: qt4.4 + Динамическая линковка
« Ответ #7 : 02 Декабря 2008, 19:34:45 »
Понятно, но я пока разрабатываю всё это дело, решил статически всё линковать.

Это не позволит использовать valgrind.

Вопросец такой, ежели я слинкую при помощи -L$$PDW -lmylib прогу с либой, которая лежит где нить в хомяке, а потом либу перепишу в /usr/lib то прога станет её видеть?
-L$$PDW - означает путь к библиотекам где-то в пользовательском каталоге?
Речь о статической линковке?
Если о ней, то вообще ни о чем думать не надо, и копировать тоже ничего не надо - там все и так в одном файле оказывается в еще одной копии.

Да, увидеть должна.
Команда ldd прога покажет все зависимости
Можно еще на время разработки поставить в ~/.bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PDW
Главное, не забыть потом, какие пути где прописаны.

« Последнее редактирование: 02 Декабря 2008, 19:48:44 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн SauronTheDark

  • Автор темы
  • Активист
  • *
  • Сообщений: 674
    • Просмотр профиля
Re: qt4.4 + Динамическая линковка
« Ответ #8 : 02 Декабря 2008, 20:52:53 »
Цитировать
Это не позволит использовать valgrind.
Пока не критично, дойдет дело до отладки, тогда и буду разбираться
Цитировать
-L$$PDW - означает путь к библиотекам где-то в пользовательском каталоге?
Нуда, пока либа собирается в юзерском каталоге. Речь идёт о динамической линковке. Просто суть такая, хотелось бы чтобы не приходилось пока отдельно устанавливать вначале либы, а потом с ними линковаться, чтобы всё было в процессе сборки программы. Скажем так бинарник лежит в release/bin а либы в release/lib собсна лучшим вариантом было бы, чтобы прога искала либы в ../lib на мой взгляд, по крайней мере

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: qt4.4 + Динамическая линковка
« Ответ #9 : 03 Декабря 2008, 08:05:08 »
тогда каталог с либами надо загнать в -L и в LD_LIBRARY_PATH и все будет работать.

P.S. export LD_LIBRARY_PATH='....' не означает что все программы в том числе и запущеные сразу увидят эту переменную среды окружения. будет работать только в том шеле, в котором выполнишь, соседний терминал даже не чухнет. если пропишешь в .bashrc тогда каждый новый шел будет всасывать эту переменную естественно из таких оболочек твоя прога будет нормально стартовать. Для того что-бы можно было из "проводника" запускать надо будет после правки .bashrc перелогинить всю графическую сессию.

 

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