![]() |
|
Модераторы: xvr |
![]()
|
|
| quarz |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 7.1.2005 Репутация: нет Всего: 3 |
Здравствуйте!
В линуксе я пока новичек, программировал до этого под windows. А тут встала необходимость сделать порт Qt-шной проги под линукс и мак. Моя программа распространяется без исходников и использует разделяемые библиотеки. Вопрос: где их размещать? В windows, например есть практика все используемые dll хранить в директории с установленной программой. Вот сейчас я скомпилировал свою программу, запускаю - она говорит "не найдена такая-то библиотека xxxxx.so", хотя этот файл лежит в каталоге с бинарником! А вот если его скопировать в /usr/local/lib или в /usr/lib - то запускается нормально. Почему так? Это я на этапе сборки в файле проекта указал не те пути откуда брать библу (и теперь бинарник хочет подключать ее непременно из того каталога), или так и должно быть? Еще один вопрос про имена. Я в проекте подключаю библиотеку "-lqwt", а сам файл называется libqwt.so. Откуда система знает, что искать нужно не qwt.so, а libqwt.so ? И еще, чем различаются .so, so.0, so.5 .. ? Ту же libqwt.so, например, линкер требует еще в варианте libqwt.so.5, хотя эти файлы идентичны (libqwt.so.5 я делал как символьную ссылку на libqwt.so) Помогите разобраться! |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
>Вопрос: где их размещать?
В /usr/lib например >В windows, например есть практика все используемые dll хранить в директории с установленной программой. И основной профит от использования dll пропадает >Откуда система знает, что искать нужно не qwt.so, а libqwt.so ? Так уж повелось, что libsome.so >И еще, чем различаются .so, so.0, so.5 .. ? Просто версии так именуют. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
стандартный путь поиска библиотек компоновщиком используете переменную среды LD_LIBRARY_PATH
не всегда _конкретной_ программе нужна общая версия либы из /usr/lib ;) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| djamshud |
|
||||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
MAKCim, не всегда, но обычно софт кладет либы именно туда.
quarz, если же нужно обязательно держать библиотеку рядом с самой программой, лучше имхо просто правильно слинковать:
Upd: Это, если рабочим каталогом будет тот, где proga.exe лежит. Иначе так:
Это сообщение отредактировал(а) djamshud - 21.12.2009, 16:49 -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
либа и есть софт ;) ну и, собственно говоря, смотря как происходит инсталляция
в чем преимущество? любое неоправданное статическое ограничение есть суть зло -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| quarz |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 7.1.2005 Репутация: нет Всего: 3 |
А чем различаются каталоги /usr/lib и /usr/local/lib ? Я прально понимаю, что в /usr/lib хранятся системные библиотеки, а в /usr/local/lib - пользовательские?
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
MAKCim, не придирайтесь, все поняли о чем, правда?
>в чем преимущество? Преимущество _имхо_. Субъективно, мне просто кажется более правильным, когда софт сам о себе заботится, без всяких дополнительных обвязок в виде скриптов. quarz, системные в /lib, в /usr/llib програмы, поставленные штатным образом дистрибутива, /usr/local/lib - самособранные и прочие левые. Разделение весьма условно, я например /usr/local вообще не использую. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| quarz |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 7.1.2005 Репутация: нет Всего: 3 |
То есть, откуда будет брать билиотеку линкер, в том же каталоге и будет искать бинарник?
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
В общем, вот достаточно простое и иногда используемое решение. Размещайте бинарник(и) и библиотеки в /opt/progname. И линкеру говорите, что я там писал, только /opt/progname. Потом в /usr/bin положите симлинк на вашу программу, и она будет работать.
Положите - я имею в виду, установочным скриптом, конечно. Пользователь за вас этого всего делать не станет.:) -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
все зависит от того, как вы запускаете программу и какой интерпретатор используюте обычно пути поиска описываются переменной среды PATH -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| quarz |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 7.1.2005 Репутация: нет Всего: 3 |
А что делать линкеру в путях переменной PATH ? Там же только каталоги с исполняемыми программами. Вот, например, мой path:
/home/alex/develop/Qt64/qt/bin:/usr/lib64/mpi/gcc/openmpi/bin:/home/alex/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib64/jvm/jre/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin Сейчас мне надо, чтобы программа могла использовать библиотеки из своего каталога. Уже вроде все варианты перепробовал, не помогает. Линкуется беp ошибок, а при запуске не находит библиотеки, приходится их кидать в /usr/lib64 иkb в /usr/local/lib64 (у меня х64 система и собираю под нее. Но проблема точно не в этом, под х86 было то же самое) Вот часть pro файла, может я тупо слэш пропустил, или не тот путь указал? Проверьте, плиз.
Я тут в путях линкера даже абсолютный адрес указал к скомпиленному бинарнику, там же и лежат все либы. Собирается без ошибок! А при запуске - ./XILab: error while loading shared libraries: libxidcusb-0.9.0.so: cannot open shared object file: No such file or directory |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
должно помочь. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| quarz |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 7.1.2005 Репутация: нет Всего: 3 |
Спасибо, действительно теперь бинарник начал искать библиотеки в каталоге rpath. Изменил на
-Wl,-rpath,./ \ чтобы при запуске бинарника он искал библы в своем каталоге. Но есть странность. Если запускать из консоли - запускается, а если кликнуть по бинарнику мышкой - не запускается, как будто не нашел библиотеки! Для rpath перепробовал "." "./" с кавычками и без, результат одинаковый. Такое чувство, будто при клике мышкой не определяется текущая директория где лежит бинарник Это сообщение отредактировал(а) quarz - 22.12.2009, 16:37 |
|||
|
||||
| quarz |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 7.1.2005 Репутация: нет Всего: 3 |
Пошлю я, наверное, этот win-style к черту, скопирую все библиотеки в /usr/lib/my_prog и не будет проблем
|
|||
|
||||
| quarz |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 7.1.2005 Репутация: нет Всего: 3 |
всетаки странно получается. При сборке для линкера я свои библиотеки могу положить куда угодно, и рпедупредить его об этом опцией -L, а бинарник все равно будет искать свои библы в стандартных путях?
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |