Russian Qt Forum

Компиляторы и платформы => Linux => Тема начата: juvf от Июнь 04, 2018, 20:54



Название: Как подключить библиотеку?
Отправлено: juvf от Июнь 04, 2018, 20:54
Linux. собрал программу с библиотекой буст. положил нужную библиотеку рядом с бинарником, запускаю - незапускается.


Код:
pi@raspberrypi:~/GatewayVoda $ ls
a.out     GatewayVoda  gwBoost    libboost_system.a   libboost_system.so.1.66.0  libboost_thread.so         libstdc++.so.6       Logs2  not
echo.php  GatewayWS    index.php  libboost_system.so  libboost_thread.a          libboost_thread.so.1.66.0  libstdc++.so.6.0.22  lora
pi@raspberrypi:~/GatewayVoda $ ldd GatewayVoda
        linux-vdso.so.1 (0x7ef86000)
        /usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76f23000)
        libwiringPi.so => /usr/local/lib/libwiringPi.so (0x76efd000)
        libboost_system.so.1.66.0 => not found
        libboost_thread.so.1.66.0 => not found
        libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0x76e21000)
        libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x76da6000)
        libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0x76d78000)
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76c37000)
        libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76c0f000)
        librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x76bf8000)
        libcrypt.so.1 => /lib/arm-linux-gnueabihf/libcrypt.so.1 (0x76bb9000)
        /lib/ld-linux-armhf.so.3 (0x54b41000)
pi@raspberrypi:~/GatewayVoda $ ./GatewayVoda
./GatewayVoda: error while loading shared libraries: libboost_system.so.1.66.0: cannot open shared object file: No such file or directory
pi@raspberrypi:~/GatewayVoda $ LD_LIBRARY_PATH='pwd' ./GatewayVoda
./GatewayVoda: error while loading shared libraries: libboost_system.so.1.66.0: cannot open shared object file: No such file or directory
pi@raspberrypi:~/GatewayVoda $

Обычно, если нет библиотеки, то ищется библиотека в текущей папке. Но тут она есть, а программа её не видит. Почему?




Название: Re: Как подключить библиотеку?
Отправлено: Old от Июнь 04, 2018, 21:04
Потому что в linux загрузчик никогда не ищет библиотеки в директории с бинарником.
Почитайте man ld.so и про RPATH.


Название: Re: Как подключить библиотеку?
Отправлено: juvf от Июнь 04, 2018, 22:02
Почитайте man ld.so и про RPATH.
Почитал. Проблема осталась.
В 2-х словах: собираю портабл приложение. Я не хочу менять какие-то настройки в системе, приписывать пути, менять конфиги ОС. Во первых не хочу на каждой машине это делать, во вторых конечный пользователь не умеет этого делать. Я хочу распаковать папку с бинарником и всеми нужными либами в одном любом месте, запустить бинарник (или скрипт) и чтоб прога заработала. Скрипт не должен менять в системе пути. Папку с бинарником могут полоджить куда угодно. Можно как-то запустит прогу с сказать линуксу "Запути эту прогу, библиотеки ищи в текущей директории"?

ps статику не предлагать.


Название: Re: Как подключить библиотеку?
Отправлено: Old от Июнь 05, 2018, 06:07
Добавьте скрипт в котором будет:
export LD_LIBRARY_PATH=<путь к вашим библиотекам>
а после запускайте ваш бинарник.


Название: Re: Как подключить библиотеку?
Отправлено: juvf от Июнь 05, 2018, 07:21
спасибо, сработало. Но раньше просто помещал рядом все библы, всякие бусты и майэскуэли, и работало.

Для юзерских машин годное решение. Для разработчика не очень. Приложение должно запускаться под gdbserver-ом. Тут я так понял без внесение в ОС каких-то переменных и конфигов не прокатит. Как запустить приложение просто бинарником без префиксных команд?


Название: Re: Как подключить библиотеку?
Отправлено: Old от Июнь 05, 2018, 09:39
Для юзерских машин годное решение. Для разработчика не очень. Приложение должно запускаться под gdbserver-ом. Тут я так понял без внесение в ОС каких-то переменных и конфигов не прокатит. Как запустить приложение просто бинарником без префиксных команд?
Это должно работать и для gdbserver. Эта указание ld.so, разработчик можете добавить эту строку к себе в .bash_profile


Название: Re: Как подключить библиотеку?
Отправлено: qate от Июнь 05, 2018, 09:49
Как запустить приложение просто бинарником без префиксных команд?

обычно всегда библиотеки просматриваются и в /usr/local/lib
положи туда свои или сделай линки


Название: Re: Как подключить библиотеку?
Отправлено: juvf от Июнь 05, 2018, 14:34
Это должно работать и для gdbserver. Эта указание ld.so, разработчик можете добавить эту строку к себе в .bash_profile
а как? Работаю в эклипсе. там в настройке дебугера есть строка, в которую можно записать аргументы передаваемые программе. но как эклипсу (или гдб серверу в эклипсе) сказать чтобы библиотеки искались в папке с бинарником?


Название: Re: Как подключить библиотеку?
Отправлено: Old от Июнь 05, 2018, 14:39
а как? Работаю в эклипсе. там в настройке дебугера есть строка, в которую можно записать аргументы передаваемые программе. но как эклипсу (или гдб серверу в эклипсе) сказать чтобы библиотеки искались в папке с бинарником?
Переменные среды там можно задавать? Вот QtCreator например это есть. Добавьте туда свою переменную LD_LIBRARY_PATH.


Название: Re: Как подключить библиотеку?
Отправлено: juvf от Июнь 05, 2018, 14:44
Переменные среды там можно задавать? Вот QtCreator например это есть. Добавьте туда свою переменную LD_LIBRARY_PATH.
конечно можно... я думаю....... попробую. Спасибо за подсказку!!!