Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / c++11, std::thread, pthread и чудеса линковки / 10 сообщений из 10, страница 1 из 1
27.05.2019, 13:46
    #39818796
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
Добрый день.

Есть крупный проект, написанный в основном на "старых" c98. Недавно один большой модуль, экранированный небольшим интерфейсом, перевели на с++11, сборка в .SO. В числе прочего был переход с нативных pthread на "стандартизованный" std::thread.

pthread в этом модуле использовался и раньше, интерфейс модуля не меняли. Многие другие проекты линковали этот .SO без проблем, не имея дополнительных ключей вроде -pthread или -ldl.

Теперь, как только модуль переведен на std::thread все собирается, но при попытке создать экземпляр std::thread вылетает
Код: plaintext
1.
2.
3.
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
Aborted 



В принципе, это обходится добавлением ключей -pthread -Wl,--no-as-needed к каждому проекту, который подхватывает .SO, но по-моему это как-то неправильно прям.

Нет ли каких-то способов статически запечатать pthread в модуль, чтобы другим частям не требовались эти ключи (как это было раньше) ?

=//=
...
Рейтинг: 0 / 0
27.05.2019, 14:39
    #39818821
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
AklinВ принципе, это обходится добавлением ключей -pthread -Wl,--no-as-needed к каждому
проекту, который подхватывает .SO

Насколько я знаю, эти ключи можно (и нужно) указать при линковке самой библиотеки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.05.2019, 17:23
    #39818910
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
AklinВ принципе, это обходится добавлением ключей -pthread -Wl,--no-as-needed к каждому проекту, который подхватывает .SO, но по-моему это как-то неправильно прям.

Нет ли каких-то способов статически запечатать pthread в модуль, чтобы другим частям не требовались эти ключи (как это было раньше) ?



На GCC это правильно.

Учти, что -pthread -- это не -lpthread.
...
Рейтинг: 0 / 0
28.05.2019, 23:00
    #39819531
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
Мне интереснг вот что. Раньше модуль использовал птреды и проблем не было, а другие компоненты могли не указывать этот ключ -pthread, все линковалось. А теперт выходит что птредами пользуется libc, а значит при ее линковке приходится подтягивать этот ключ. Маразм.
...
Рейтинг: 0 / 0
29.05.2019, 00:54
    #39819556
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
AklinА теперт выходит что птредами пользуется libc

При чём тут libc если у тебя исключение при использовании С++ STL?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.05.2019, 14:05
    #39819831
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
Dimitry SibiryakovПри чём тут libc если у тебя исключение при использовании С++ STL?..
Исключение происходит на строчке, где идет аллокация std::thread.
...
Рейтинг: 0 / 0
29.05.2019, 17:24
    #39820012
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
AklinИсключение происходит на строчке, где идет аллокация std::thread.

И? Дальше по стэку пройти не судьба?

Я же уже сказал: библиотека, использующая потоки, должна собираться с -pthread. Просто
потому, что это единственные возможные потоки на Линухе. Тогда ей будет сугубо всё равно
из какого приложения она используется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.05.2019, 00:38
    #39820119
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
авторНет ли каких-то способов статически запечатать pthread в модуль, чтобы другим частям не требовались эти ключи (как это было раньше) ?проблема в том, что кто-то должен инициализировать плюсовой рантайм
+ самая большая проблема в оптимизаторе, плюсы снимают все гарантии, что это будет работать корректно и оптимизатор что нибудь не наоптимизирует
...
Рейтинг: 0 / 0
07.06.2019, 12:38
    #39823981
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
Dimitry SibiryakovAklin
И? Дальше по стэку пройти не судьба?

thread = new std::thread(...)

Куда уж дальше?
Нет желания ковыряться в исходниках стандарта...
Dimitry SibiryakovЯ же уже сказал: библиотека, использующая потоки, должна собираться с -pthread. Просто
потому, что это единственные возможные потоки на Линухе. Тогда ей будет сугубо всё равно
из какого приложения она используется.Не помогает. Приходится собирать приложение, которое может залинковать эту библиотеку.
...
Рейтинг: 0 / 0
07.06.2019, 12:47
    #39823989
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c++11, std::thread, pthread и чудеса линковки
AklinНет желания ковыряться в исходниках стандарта...

С одной стороны это правильно, потому что после такого хочется это развидеть и никогда не
пользоваться этим дерьмищем. С другой стороны - полезно для понимания почему никогда не
стоит пользоваться этим дерьмищем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / c++11, std::thread, pthread и чудеса линковки / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]