LINUX.ORG.RU

Как включить в компиляцию библиотеку?


0

1

Есть компилятор gcc компилирую в программу С с опцией -lpthread но это только компиляция с этой библотекой и на конечном девайсе запуск приводит к выводу ерора: can't load library 'libpthread.so.0'

как включить эту lybrary компилируемую программу?


Ответ на: комментарий от ymn

да я использую уже собранный toolchain от DD-WRT http://www.dd-wrt.com/dd-wrtv2/downloads/others/sourcecode/toolchains/current...

и моя программа написанная на С под MIPS архитектуру компилится с параметром -lpthread

но потом на девайсе при запуске пишет, что не хаватает есть библиотеки can't load library 'libpthread.so.0'

Signal
() автор топика
Ответ на: комментарий от Signal

за ссылку на овер 900Мб архив спасибо конечно, но качать его мне не хочется)

попробуй скомпилять небольшой тестовый пример:

#include <pthread.h>

void *f (void*)
{
  int i = 1;
  return NULL;
}

int main()
{
  pthread_t p;
  pthread_create(&p, NULL, f, NULL);
  return 1;
}

у меня все прекрасно работает:

$ gcc test.cpp -lpthread
$ ./a.out 
$ du -hs a.out 
8,0K	a.out
$ gcc test.cpp -lpthread -lstdc++ -static
$ ./a.out 
$ du -hs a.out 
964K	a.out
ymn ★★★★★
()
Ответ на: комментарий от ymn

та не, компилится у меня тоже нормально мы по ходу не поняли друг друга или я не так написал

просто на конечном девайсе с MIPS процессором там нет библиотеки вот этой libpthread.so.0

как скомпилить так, чтоб эта либа была включена уже в скомпиленную программу

Signal
() автор топика
Ответ на: комментарий от Signal

Поищи в этом тулчейне что-то типа *pthread*.a

Найдёшь — линкуй с ней (указываешь этот .a наравне с .c, gcc сам разберётся)

i-rinat ★★★★★
()
Ответ на: комментарий от Signal

просто это файл указать? что-то не понял

gcc -o your-binary-name source-1.c source-2.c /path/to/sdk/some/other/path/libpthread-version.a

Я никогда так не делал, но должно работать.

Кстати, а чего бы тебе на девайс пакет с libpthread.so.0 не поставить? У меня на OpenWrt он 80 килобайт занимает всего.

i-rinat ★★★★★
()

Линковка и загрузка в рантайме - разные вещи.

Если линковать с *.so, то на конечном девайсе должна лежать эта so по пути про который знает ldconfig.

Если линковать с *.a, то должно работать сразу.

Belkrr
()
Ответ на: комментарий от Signal

упарвление mips процессором под линух

Signal
() автор топика
Ответ на: комментарий от Signal

девайс это телевизор, плазма, как там поставить?

не знаю, как в dd-wrt, в openwrt ставится через opkg install. Если это телевизор, так ли уж надо на него вообще что-то ставить?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

gcc -o your-binary-name source-1.c source-2.c /path/to/sdk/some/other/path/libpthread-version.a

откомпилилось ошибок не писал, но и либу libpthread не вставил

Если это телевизор, так ли уж надо на него вообще что-то ставить?

в него хочу добавить, чтоб он сам IPTV каналы искал живые

Signal
() автор топика
Ответ на: комментарий от Signal

т.е. есть список, бывает из 200-300 штук работают штук 40, а бывают поднимаются и штук 150 работают вот и хочу добавить в телек что он список показывал только тех, которые показують, как-то так прога готовая, а на том MIPS хрен пашет, из-за библиотеки гребанной

Signal
() автор топика
Ответ на: комментарий от Signal

откомпилилось ошибок не писал, но и либу libpthread не вставил

Это ты как определил?

У меня статический бинарник с pthreads отрабатывает отлично на qemu-mipsel.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

при компиляции ничего левого не писалось закинул на девайс файл, при запуске таж ерунда, нет библиотеки

Signal
() автор топика
Ответ на: комментарий от Signal

а как сюда постить код, а то он при добавлении показывается нормально построчно, а запостишь, в одну линию

Signal
() автор топика
Ответ на: комментарий от Signal

а вот этого нет libpthread.so.0 сабаки китайцы

Signal
() автор топика
Ответ на: комментарий от Signal
rinat@f-laptop:~/Downloads/3$ ~/Downloads/2/toolchain-mipsel_3.3.6_BRCM24/bin/mipsel-linux-uclibc-gcc  thread-ex.c -o qwerty -lpthread
rinat@f-laptop:~/Downloads/3$ strings qwerty | grep so
/lib/ld-uClibc.so.0
libpthread.so.0
libgcc_s.so.1
libc.so.0
rinat@f-laptop:~/Downloads/3$ ~/Downloads/2/toolchain-mipsel_3.3.6_BRCM24/bin/mipsel-linux-uclibc-gcc  thread-ex.c -o qwerty ~/Downloads/2/toolchain-mipsel_3.3.6_BRCM24/lib/libpthread.a 
rinat@f-laptop:~/Downloads/3$ strings qwerty | grep so
/lib/ld-uClibc.so.0
libgcc_s.so.1
libc.so.0

i-rinat ★★★★★
()
Ответ на: комментарий от Signal

а что значит BRCM24?

очевидно, Broadcom, linux 2.4

я компилю mips_r2_gcc-linaro_uClibc-0.92

Ты уверен, что твой проц поддерживает r2?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

нет не уверен канеш но под r2 она запускаецо

Signal
() автор топика
Ответ на: комментарий от Signal

никогда раньше линуксом не пользовался

Signal
() автор топика
Ответ на: комментарий от Signal

а что такое r2?

mips'ов разных много, но сейчас чаще всего встречаются архитектуры (фактически, набор команд) mips32r1 и mips32r2. Во второй команд больше, у первого ядро проще, подробностей не знаю. mips32r1-бинарники запускаются на mips32r2, обратное неверно.

i-rinat ★★★★★
()
Ответ на: комментарий от Signal

не те библиотеки, которые BRCM24 не пашут, ну всмысле компиляцо но на телеке applet not found

что-то я не пойму, а r2 пашут во блин

Signal
() автор топика
Ответ на: комментарий от Signal

но на телеке applet not found

Если это единственный способ отладки, то проще бросить.

а r2 пашут

Ну тогда используй компилятор от linaro, как и раньше. Только распотроши .a файлы на .o и цепляй их по одному, пока все зависимости не удовлетворятся. .a файлы — это ar архивы, их можно распаковать так: ar x libpthread.a

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

ага я mc юзаю понял, что это архивы, только можно поподробнее, ну распакую я его, а что с ним делать: Только распотроши .a файлы на .o и цепляй их по одном мне как юзерю с несколькодневным стажем линукса это не понятно совсем

Signal
() автор топика
Ответ на: комментарий от Signal

я так понял, что там ключевое MIPS а MIPSEL не работает порядок байт типа разный

Signal
() автор топика
Ответ на: комментарий от Signal

а что с ним делать

дописываешь в команду к gcc. Самое простое — дописать *.o, а файлы по одному кидать в директорию, где компилируешь. Тогда *.o будет разворачиваться в список всех .o файлов. Сначала кидаешь всё из libpthread.a. Он при сборке ругнётся, что не может найти какую-нибудь функцию. Ты ищешь mc по содержимому *.a файлов строку с названием этой функции, потом отыскиваешь .o файл, где находится реализация функции, копируешь его в директорию сборки. Затем снова запускаешь компиляцию; если ты угадал, он ругнётся уже на другие функции, повторяешь поиск для них. И так пока он не перестанет жаловаться. Муторно, знаю.

юзерю с несколькодневным стажем линукса это не понятно совсем

В windows всё точно так же :)

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

да, я согласен что точно также)))) просто пока тут с ноля въедешь откуда ноги ратут, состаришься)))

я только не пойму, в архиве .a файлов .o нет только .so с ними делать-то?)))

Signal
() автор топика
Ответ на: комментарий от Signal

не с путями я не ошибся, если заведомо не то указать, то ругается компилятор, что нет файла

так какого президента она не пашет сабака

Signal
() автор топика
Ответ на: комментарий от Signal

я так понял, что там ключевое MIPS а MIPSEL не работает порядок байт типа разный

Да, что-то я об этом не подумал. Привык, что везде mipsel.

файлов .o нет только .so с ними делать-то?)))

там .os, похоже это те же самые .o, просто суффикс другой

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

епана так там файлов именно по pthread штук 20-30, с каких юзать-то libpthread.so и близко нет только pthread c разной промежуточной деятельностью, ну я как из винды по названию файлов сужу вот блин гемор еще тот

Signal
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.