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

Есть крупный проект, написанный в основном на "старых" 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
c++11, std::thread, pthread и чудеса линковки
    #39818821
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinВ принципе, это обходится добавлением ключей -pthread -Wl,--no-as-needed к каждому
проекту, который подхватывает .SO

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

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



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

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

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

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

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

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

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

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


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