![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ivanstanislavovich |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
Давайте разберемся с этим вопросом подробней. Да, я линкую с приложением и библиотеку, но не компилирую его в приложение. Если не указать библиотеки линковщику - не находятся функции с библиотеки. А следовательно не проходит линковка. По этому, как мне кажется, я вынужден указывать проекту приложения пути к используемым динамическим библиотекам.
я использовал эти ключи, как мне кажется , во всех вариациях - положительного результата не получал:
Признаю свою не грамотность в незнании, когда нужно использовать `, а когда нет.
Считаю не правильным использовать системные пути для указания мест хранения библиотек приложения. К тому же уважаемый kemiisto предоставил ссылку, в которой объясняется почему этого делать не нужно, что совпадает с моим мнением. |
||||||||
|
|||||||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Это работает не везде, под соляркой, например... Или в системную директорию, /usr/lib и т.п. Это сообщение отредактировал(а) Леопольд - 9.9.2011, 12:02 -------------------- вопросов больше чем ответов |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
это называется "приложение статически связанное с динамической библиотекой". т.е. библиотека-то динамическая. что позволяет вам заменять ее не пересобирая приложение, но без изменений экспортируемых сигнатур. другой способ - динамической связывание. реализуется при помощи dlopen() и dlsym(). в этом случае вам вовсе не нужно линковать библиотеку с приложением. это не системные пути. эта переменная используется только в user-space. выполните в терминале: echo $LD_LIBRARY_PATH что видите? правильно, ничего. потому что вы эту переменную никак не установили. в добавок, LD_LIBRARY_PATH относится только к экземпляру bash`а, или сессии пользователя(если вы ее пропишите в ~/.bashrc). т.е. ее значение никак не отражается на системе и ее переменных. Добавлено через 1 минуту и 9 секунд это и в линуксе не работает, например ;) |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Разве? Вроде бы работало... Хотя может и путаю, надо удостовериться, но мне негде сейчас. Под виндой точно работает)
Это сообщение отредактировал(а) Леопольд - 9.9.2011, 12:03 -------------------- вопросов больше чем ответов |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
зато работает в венде. ибо поиск начинается именно с каталога в котором запущена программа.
ivanstanislavovich, кстати. почитайте еще про LD_PRELOAD. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Дайте полную строку линковки, как она записана у вас в файле. Добавлено через 1 минуту и 40 секунд PS. LD_LIBRARY_PATH действительно крайне не рекомендуется использовать для обычного запуска приложений, но для проверки, находятся .so или нет ее вполне можно задействовать |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
ivanstanislavovich |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
boostcoder, мне не нравится метод решения через $LD_LIBRARY_PATH. Выходит, для того что бы приложение работало, я должен прописывать пути к используемым библиотекам где-то на стороне. Но мне больше подходит решение, когда приложение самостоятельно ищет библиотеки в рабочей директории, как в Windows. Или это противоречит принципам Unix подобных ОС?
Насчет динамического и статического связывания - я более детально ознакомлюсь с динамическим связыванием и смогу общаться на эту тему. Но, как мне кажется, статическое связывание с динамической библиотекой, мне полностью подходит. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Не обязательно. Приложение может запускаться через shell'овский скрипт, который выставит LD_LIBRARY_PATH во что надо и запустит что надо. В принципах 'Unix подобных ОС' делать shell'овские файлы по каждому поводу (и без повода) ![]() |
|||
|
||||
ivanstanislavovich |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
xvr, у меня нет рабочей комбинации, по этому я не знаю какую из них предоставить Вам.
В одних случаях, я получаю ошибку "undefined reference" к используемым функциям в библиотеке. В других - cannot find -[имя библиотеки].so. Если задать Link libraries не имя, а путь к библиотеке - компиляция проходит успешно, но приложение не запускается, ни в отладке, ни самостоятельно из-за не правильного пути к библиотеке (описано выше) Если подставить библиотеки по "горбатому" пути - приложение работает. Это сообщение отредактировал(а) ivanstanislavovich - 9.9.2011, 12:19 |
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
эм.. а так, не пробовали?
угу. для библиотек есть стандартные каталоги "/lib, /usr/lib, /usr/local/lib" |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
ivanstanislavovich |
|
||||||||||||||||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
xvr, хорошо:
.................................................. пх-х-х Добавлено через 4 минуты и 56 секунд boostcoder, я пробую LD_LIBRARY_PATH, по Вашим рекомендациям
Но Code::Block по прежнему не находит библиотеку (C::B перезапустил). В чем может быть причина ? |
||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
ivanstanislavovich |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
xvr, я не понял Вас.
-l о каком моем этаком Вы говорите? там было написан это где Это там ? Имя моей библиотеки имело такие имена, я эксперементировал:
во всех случаях я имел ошибку "cannot find", за исключением того, что если имя библиотеки было "liblib" то "cannot find -|lib.so" ошибку имел. Не моглибы Вы, xvr, предоставить мне информацию о "`"? Это сообщение отредактировал(а) ivanstanislavovich - 10.9.2011, 12:13 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |