Почему приложению, которое зависит от динамически подключаемой библиотеки с std::async, нужен -lpthread?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему приложению, которое зависит от динамически подключаемой библиотеки с std::async, нужен -lpthread?

Сообщение Anonymous »

Я разрабатываю динамически подключаемую динамическую библиотеку (т.е. плагин) для Linux. Этот плагин использует std::async. ldd показывает, что этот плагин зависит от -lpthread. Кажется нормально. Но если я попытаюсь загрузить эту библиотеку в какое-либо приложение - исключение типа «Включить многопоточность для использования std::thread: операция не разрешена» выдается из внутрибиблиотекового вызова std::async. Если я затем свяжу -lpthread с этим приложением - все станет хорошо. Я имею в виду, если он связан и называется так:

Код: Выделить всё

[user@os Folder]$ ldd libSomeLib.so | grep pthread
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f8fc1f38000)
[user@os Folder]$ ldd some_app | grep pthread
[user@os Folder]$ ./some_app
terminate called after throwing an instance of 'std::system_error'
what():  Enable multithreading to use std::thread: Operation not permitted
Aborted (core dumped)
[user@os Folder]$
- тогда возникает исключение. Но если он связан и называется так:

Код: Выделить всё

[user@os Folder]$ ldd libSomeLib.so | grep pthread
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f6828eca000)
[user@os Folder]$ ldd some_app | grep pthread
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007faaafe90000)
[user@os Folder]$ ./some_app
Some fine output
[user@os Folder]$
-- тогда все становится хорошо. Само приложение не имеет в своем коде средств многопоточности или асинхронности.
Это особенность многопоточности stl или я что-то пропустил? Если это функция, то почему необходимо связать приложение с -lpthread? Если я что-то пропустил, то что именно я пропустил?

Подробнее здесь: https://stackoverflow.com/questions/798 ... sync-needs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»