Либы рядом с исполняемым модулем

14 сообщений / 0 new
Последнее сообщение
hooky-mars
Не в сети
Зарегистрирован: 23/09/2010
Либы рядом с исполняемым модулем

Hello world!

У меня есть железка с BusyBox в качестве операционки.
Хочу для нее скомпилитить парочку программок (transmission, samba, ssh и др.), только с ними надо будет компилить и библиотеки.

Собственно вопрос. Обязательно эти библиотеки хранить гдето в системных каталогах (например /usr/local/lib), или можно рядышком положить (как это в мастдае, сначало ищется рядышком, а потом уже по переменной PATH)?
<span class='smallblacktext'>[ Редактирование ]</span>

Rezedent12 (не проверено)

Никто не запрещает... правда это не юниксово...

hooky-mars
Не в сети
Зарегистрирован: 23/09/2010

Т.е. это будет работать?
Просто файловая система busybox не доступна для записи, да и места очень мало. Но можно подключить саташный жесткий, вот там то я могу развернуться вовсю шырь... :-)
<span class='smallblacktext'>[ Редактирование 13.08.2010 - 16:13:48 ]</span>

RedSerpent (не проверено)

Ну а если нужные пути в PATH прописать (экспортировать)?

hooky-mars
Не в сети
Зарегистрирован: 23/09/2010

Хм... Как то не подумал. Спасибо!

RedSerpent (не проверено)

Не за что, отпишись после о результате, пож-ста!

hooky-mars
Не в сети
Зарегистрирован: 23/09/2010

Если все получиться, собираюсь набросать статейку. С большим числом проблем пришлось столкнуться.

hooky-mars
Не в сети
Зарегистрирован: 23/09/2010

не буду новую тему создавать, бо все из той же оперы.
Как посмотреть версию ядра, и версию gcc под которой собирался libc.s0? Пробовал выполнить /lib/libc.s0, пишет нет прав, пробовал менять права, пишет файловая система только для записи. Скопировал на жесткий, пробую chmod 777 /mnt/hdd/libc.s0 - пишет операция не поддерживается. Как победить это дело?
<span class='smallblacktext'>[ Редактирование 13.08.2010 - 22:31:59 ]</span>

RDron
Аватар пользователя RDron
Не в сети
Зарегистрирован: 20/09/2010

Можно открыть HEX редактором и поискать.

Например для моей системы:
Compiled by GNU CC version 4.4.4
Compiled on a Linux 2.6.34

Цель у выпущенной стрелы одна – мишень, цель в жизни тоже одна – смерть.

kalpa
Аватар пользователя kalpa
Не в сети
Зарегистрирован: 20/09/2010

Да простят меня участники этого обсуждения, но мой опыт подсказывает, что задача весьма проста.

Только путь к динамическим библиотекам следует указывать НЕ в переменной PATH, НО в переменной LD_LIBRARY_PATH.
Никаких проблем с динамической линковкой библиотек, расположенных в "нестандартных" каталогах нет.
Постоянно пользуюсь подобным подходом для экстремально новых или экстравагантных пакетов.

Rodegast
Аватар пользователя Rodegast
Не в сети
Зарегистрирован: 20/09/2010

kalpa полностью с тобой согласен. Запускать всё это надо так.
export LD_LIBRARY_PATH=каталог где либы лежат
./программа

kalpa
Аватар пользователя kalpa
Не в сети
Зарегистрирован: 20/09/2010

Тут вот какая история.
export устанавливает значение переменной. Иными словами она будет видна и после исполнения команды.
Если этого не требуется, можно просто в командной строке указать LD_LIBRARY_PATH=/foo/bar /foo/bar/my_application

А можно и вовсе определить текущий каталог "." в LD_LIBRARY_PATH глобально и запускать команду гарантировано с нужным текущим каталогом где и собственно команда расположена, и библиотеки к ней.

Но это уже дело вкуса (если хотите)

RedSerpent (не проверено)

позволю себе маленькое дополнение:
В C-shell'ах и его производных команда export меняется на setenv

hooky-mars
Не в сети
Зарегистрирован: 23/09/2010

А существует ли переменная для указания папки include для make? В set ни чего такого не углядел. Более того там нет CC, AR переменных.
Ме надо указать каталог include для сборки busybox 1.1.3
Делаю так:
#!/bin/sh
COMPILE=$HOME/SOFT/mipsel/cross-compiler-mipsel
PATH=$COMPILE/bin:$PATH
INCLUDEDIR=$COMPILE/include
export CC=mipsel-gcc
export AR="mipsel-ar rc"
make clean
make ARCH=mipsel \ CROSS_COMPILE=mipsel- \ -inclide-dir=$COMPILE/include/ \ defconfig
make ARCH=mipsel \ CROSS_COMPILE=mipsel- \ --include-dir=$COMPILE/include \ menuconfig
make ARCH=mipsel \ CROSS_COMPILE=mipsel- \ --include-dir=$COMPILE/include \ install

Возвращяет ошибку
libbb/procps.c:15:22: error: asm/page.h: No such file or directory

Хотя этот файл в указанной мной папке (в --include-dir) есть.

<span class='smallblacktext'>[ Редактирование 09.09.2010 - 12:29:09 ]</span>

RSS-материал