The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Компиляция во FreeBSD с -lpthread"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Компиляция во FreeBSD с -lpthread"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 02-Сен-04, 11:34  (MSK)
Доброго времени суток. Возникла проблемма:

Сей код работает под Linux.
Компилится строчкой    /usr/bin/gcc -o client3 client5.c -lptread.
Во FreeBSD говорит
$ /usr/local/bin/gcc34 -o client3 client5.c -lptread
/usr/libexec/elf/ld: cannot find -lpthread.
Если компилить с -pthread получаю следующее


_____________________________________________________________

$ ./client3
Before creating
After creating
Before join
Segmentation fault (core dumped)
$ sh: turning off NDELAY mode
^C
$
________________________________________________________________________
Далее код.
_________________________________________________________________________

...

for (i = 0; i<NUM_SITES; i++)
  if (Status[i])
  {
    printf ("Before creating\n");
    pthread_create (&thread[indexes[i]], NULL, (void*)&work_funct, (void*) &indexes[i]);
    printf ("After creating\n");
  }


for (i = 0; i<NUM_SITES; i++)
  if (Status[i])
  {
    printf ("Before join\n");
    pthread_join (thread[indexes[i]], NULL);
    printf ("After join\n");
  }
...
_________________________________________________________________________

void workfunct (void *i)
{
   printf ("Begin\n");
  ....
}

_________________________________________________________________________

Как я понял из гугля, -lpthread - новая библиотека, а -pthread - старая, но что именно менять и как - не понятно:(и нужно ли?).
Остаётся только добавить, что ранее на этой системе стоял(и стоит) gcc 2.95, теперь установлен gcc 3.4 по адресу /usr/local/bin/gcc34(компилил им).

Система FreeBSD 4.9

Спасибо за ответы-советы.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Компиляция во FreeBSD с -lpthread"
Сообщение от v3625 emailИскать по авторуВ закладки(??) on 02-Сен-04, 14:45  (MSK)
Выдержка из "man pthread" в FreeBSD 4.3 :

The current FreeBSD POSIX thread implementation is built in the library
libc_r which contains both thread-safe libc functions and the thread
functions.  This library replaces libc for threaded applications.

By default, libc_r is built as part of a 'make world'.  To disable the
build of libc_r you must supply the '-DNOLIBC_R' option to make(1).

A FreeBSD specific option has been added to gcc to make linking threaded
processes simple.  gcc -pthread links a threaded process against libc_r
instead of libc.


В FreeBSD имеется версия libc с threads, называющаяся libc_r
и чтобы программа ее использовала, нужно компилировать с ключом
-pthread .
Ключ -l подключает либы, находящиеся обычно в /usr/lib и имеющие
имена lib<имя_либы>, например -lm подключает /usr/lib/libm .
Никаких libthread и libpthread в /usr/lib нет.
Т.е. ты правильно указываешь -pthread, а segmentetion fault возникает
видимо из-за ошибок в программе.

А вообще я не люблю threads, и не вижу особого смысла их использовать
(может быть из-за того, что практики недостаточно и все такое прочее).
Простая клиент-серверная модель с порождением дочерних процессов
несколько медленнее, зато надежнее. Один потомок заглючил - один клиент
отвалился. К тому же во время работы программы все под контролем -
можно мониторить и управлять всеми дочерними процессами стандартными
средствами unix.
Затраты ресурсов на fork обычно много меньше, чем на работу самого
процесса.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Компиляция во FreeBSD с -lpthread"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 04-Сен-04, 11:11  (MSK)
>В FreeBSD имеется версия libc с threads, называющаяся libc_r
>и чтобы программа ее использовала, нужно компилировать с ключом
>-pthread .
>Ключ -l подключает либы, находящиеся обычно в /usr/lib и имеющие
>имена lib<имя_либы>, например -lm подключает /usr/lib/libm .
>Никаких libthread и libpthread в /usr/lib нет.
>Т.е. ты правильно указываешь -pthread, а segmentetion fault возникает
>видимо из-за ошибок в программе.

Сложность в том, что под линукс нет sigmentation fail и прога работает как часы, хотя я мало сомневаюсь в том, что ошибка моя. Только найти пока не могу, вот и подумал, что может либы не те.

>
>А вообще я не люблю threads, и не вижу особого смысла их
>использовать
>(может быть из-за того, что практики недостаточно и все такое прочее).
>Простая клиент-серверная модель с порождением дочерних процессов
>несколько медленнее, зато надежнее. Один потомок заглючил - один клиент
>отвалился. К тому же во время работы программы все под контролем -
>
>можно мониторить и управлять всеми дочерними процессами стандартными
>средствами unix.
>Затраты ресурсов на fork обычно много меньше, чем на работу самого
>процесса.

В моём случае важно быстродействие (критично), хотя я не оценивал затратность fork(). Так же threads были выбраны из за простоты организации (хотя fork() и не намного сложнее), кроме того, нет жесткой необходимости монитоинга дочерних процессов.

Спасибо за ответ. Буду искать дальше.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Компиляция во FreeBSD с -lpthread"
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 05-Сен-04, 14:36  (MSK)
Мне не приходилось иметь дело с FreeBSD, однако к представленному
коду можно сделать одно замечание.

Рабочая функция потока имеет сигнатуру void func(void*),
тогда как в соответствии с документацией эта сигнатура
должна быть void* func(void *). Теоретически это может приводить
к SIGSEGV на некоторых реализациях потоковой библиотеки. Собственно,
при правильном определении сигнатуры функции не должно возникать
необходимости приводить её тип к void* в вызове pthread_create().

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру