![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ivanstanislavovich |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
Приветствую.
Когда подключаю библиотеки с относительным путем (../bin/debug), то во время отладки они находятся. Но когда исполняемый файл выполнить без нее (простой запуск), то библиотеки уже не находятся (в корне директории эти файлы есть), т.к. их нет по указанному пути, относительно исполняемого файла. Библиотеки динамические (подключаемые во время выполнения программы) Способ подключения библиотек 1 (не рабочий)
OS: Ubuntu IDE: CodeBlock Lang: C++ Добавлено через 10 минут и 30 секунд Структура каталогов проекта: bin debug (для всех нижеследующих проектов) Project1 Project2 |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Добавь ключ компилятора -Wl,-rpath,.
-------------------- You're face to face With man who sold the world |
|||
|
||||
ivanstanislavovich |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
я пробовал это значение указать в:
|
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Кхм. Попробуй в Other linker options вбить
-------------------- You're face to face With man who sold the world |
|||
|
||||
ivanstanislavovich |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
Спасибо за оказание помощи. Я попробовал "-rpath .", но все так же без результатов. Попробую объясниться иначе: У меня два проекта. Один - динамическая библиотека, другой - консольное приложение. Оба проекта компилируют в одну директорию (относительно каждого из них, это ../bin/debug). Линковщику указую относительный путь к библиотеке (которая лежит в общем каталоге). Программа компилируется успешно, линкуется тоже. Но вот запуск прерывается из-за отсутствующей библиотеке по адресу "../bin/debug/lib.so", т.е. пути, который я задавал линковщику, относительно расположения файла проекта. Изменение адреса на имя для библиотеки, для линковщика, и добавление путей поиска (Search Directories -> Linker) все равно не дало возможности скомпилировать проект приложения - не находит библиотеки. Это сообщение отредактировал(а) ivanstanislavovich - 1.9.2011, 19:38 |
|||
|
||||
ivanstanislavovich |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Пропишите в переменную окружения LD_LIBRARY_PATH абсолютный путь к вашей .so до запуска самого приложения. Вариант с rpath тоже вполне рабочий, особенно если .so будет лежать в какой то фиксированной директории (лучше прямо из корня), иначе будут пляски с путями, если вы захотите перенести ваш исполняемый файл в другое место.
Или можно записать в rpath специальный символ:
|
|||
|
||||
ivanstanislavovich |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
xvr, спасибо за помощь.
Но у меня не получилось. Библиотеку скомпилировал в ту же директорию, что и приложение. Для приложения указал директорию поиска для линковщика - директорию в которой лежит библиотека (относительный путь), т.е. та же директория, что и для скомпилированного приложения. Для линковщика указал относительные пути к библиотекам Для линковщика задал дополнительные параметры:
1-й и 2-й (по отдельности для разных компиляций) по вашим рекомендациям, для разрешения вопроса последние два, для разрешения других ошибок, связанных с ошибками:
и
В указанном выше исполнении приложение не запускается как при отладке так и самостоятельно, по причине не верного пути к библиотекам. xvr, Вы говорили
т.е. в это системная переменная ? Если так, то я этот способ пока не испытывал. Но я бы не хотел прибегать к решению проблемы таким вот способом. |
||||||||
|
|||||||||
ivanstanislavovich |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
тут я нашел похоже решение. Но я не могу понять, что означает
т.е. как-то добавить библиотеку, но не добавлять .so и некий lib. Что добавлять, и что такое lib (расширение файла?) |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Читать. -------------------- |
|||
|
||||
ivanstanislavovich |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
Народ, а почему не работает "Search directories" для Linker:
Когда задаю только имя .so линковщик не находит библиотеку, хотя в директории поиска указан каталог, в котором есть эта библиотека? |
|||
|
||||
ivanstanislavovich |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
Неужели никто не работает с динамическими библиотеками?! Как они у Вас подключаются?!
|
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
во первых - почему тема в общем разделе?
во вторых - ivanstanislavovich, в топике вы написали: Библиотеки динамические (подключаемые во время выполнения программы). так а зачем вы их тогда линкуете с приложением? используйте dlopen(), dlsym(). в третьих - это: и это: из-за того, что вы указываете не те пути для этих библиотек. в четвертых - в чем все же у вас вопрос? Добавлено через 3 минуты и 37 секунд перечитал, и вроде как понял, что у вас проблема с тем, что исполняемый файл не находит .so`шки которые лежат в только вам известном "месте"(хм.. звучит-то как ![]() уже написали, это решается при помощи LD_LIBRARY_PATH. Добавлено через 13 минут и 8 секунд
работаю. dlopen(), dlsym(). |
|||
|
||||
ivanstanislavovich |
|
||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 16.8.2007 Где: Укр.Кривой Рог Репутация: нет Всего: нет |
boostcoder, Спасибо за ответ
По Вашим вопросам:
Перечитав предложенные группы тем я пришел к такому выводу. А по Вашему, где должна находится тема?
Мне кажется, что все это время я как раз пытался уйти от компиляции библиотек в приложении.
Ознакомлюсь, мне нужно время что бы понять, о чем Вы говорите.
Я как раз и пытаюсь указать пути к библиотекам так, что бы приложение работало как в отладке, так и самостоятельно. Буду благодарен, если, наконец, этот вопрос разрешится.
Вопрос в том, что у меня имеется динамическая библиотека, которую я хочу подключить к приложению. Оба проекта (библиотека и приложения) компилируются в общую директорию (../bin/Debug, относительно обоих проектов). Испробовав множество различных способов, я получаю не верные ссылку к библиотеке на этапе линковки, или запуска приложения в режиме отладки, или самостоятельного запуска приложения. Искомый путь библиотек, при успешной компиляции и линковки приложения "../bin/Debug", относительно исполняемого файла, а мне необходимо получить "./", относительно исполняемого файла.
Мне бы не хотелось использовать данный способ разрешения вопроса. |
||||||||||||
|
|||||||||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
тут: C/C++: Программирование под Unix/Linux но ладно. оставьте. модеры перенесут если что. вам кажется? ![]() что касается линковки - для этого есть "-L" и "-rpath". что касается поиска библиотеки при запуске - уже написали несколько раз - LD_LIBRARY_PATH. именно для подобных случаев она и предоставлена пользователю.
позвольте узнать о причинах? зы я так понял, что динамическую библиотеку вы все же линкуете с приложением. хотя в топике говориться об обратном. Это сообщение отредактировал(а) boostcoder - 9.9.2011, 11:33 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |