|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
Добрый день. Есть крупный проект, написанный в основном на "старых" c98. Недавно один большой модуль, экранированный небольшим интерфейсом, перевели на с++11, сборка в .SO. В числе прочего был переход с нативных pthread на "стандартизованный" std::thread. pthread в этом модуле использовался и раньше, интерфейс модуля не меняли. Многие другие проекты линковали этот .SO без проблем, не имея дополнительных ключей вроде -pthread или -ldl. Теперь, как только модуль переведен на std::thread все собирается, но при попытке создать экземпляр std::thread вылетает Код: plaintext 1. 2. 3.
В принципе, это обходится добавлением ключей -pthread -Wl,--no-as-needed к каждому проекту, который подхватывает .SO, но по-моему это как-то неправильно прям. Нет ли каких-то способов статически запечатать pthread в модуль, чтобы другим частям не требовались эти ключи (как это было раньше) ? =//= ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 13:46 |
|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
AklinВ принципе, это обходится добавлением ключей -pthread -Wl,--no-as-needed к каждому проекту, который подхватывает .SO Насколько я знаю, эти ключи можно (и нужно) указать при линковке самой библиотеки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 14:39 |
|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
AklinВ принципе, это обходится добавлением ключей -pthread -Wl,--no-as-needed к каждому проекту, который подхватывает .SO, но по-моему это как-то неправильно прям. Нет ли каких-то способов статически запечатать pthread в модуль, чтобы другим частям не требовались эти ключи (как это было раньше) ? На GCC это правильно. Учти, что -pthread -- это не -lpthread. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 17:23 |
|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
Мне интереснг вот что. Раньше модуль использовал птреды и проблем не было, а другие компоненты могли не указывать этот ключ -pthread, все линковалось. А теперт выходит что птредами пользуется libc, а значит при ее линковке приходится подтягивать этот ключ. Маразм. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2019, 23:00 |
|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
AklinА теперт выходит что птредами пользуется libc При чём тут libc если у тебя исключение при использовании С++ STL?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2019, 00:54 |
|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПри чём тут libc если у тебя исключение при использовании С++ STL?.. Исключение происходит на строчке, где идет аллокация std::thread. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2019, 14:05 |
|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
AklinИсключение происходит на строчке, где идет аллокация std::thread. И? Дальше по стэку пройти не судьба? Я же уже сказал: библиотека, использующая потоки, должна собираться с -pthread. Просто потому, что это единственные возможные потоки на Линухе. Тогда ей будет сугубо всё равно из какого приложения она используется. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2019, 17:24 |
|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
авторНет ли каких-то способов статически запечатать pthread в модуль, чтобы другим частям не требовались эти ключи (как это было раньше) ?проблема в том, что кто-то должен инициализировать плюсовой рантайм + самая большая проблема в оптимизаторе, плюсы снимают все гарантии, что это будет работать корректно и оптимизатор что нибудь не наоптимизирует ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 00:38 |
|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovAklin И? Дальше по стэку пройти не судьба? thread = new std::thread(...) Куда уж дальше? Нет желания ковыряться в исходниках стандарта... Dimitry SibiryakovЯ же уже сказал: библиотека, использующая потоки, должна собираться с -pthread. Просто потому, что это единственные возможные потоки на Линухе. Тогда ей будет сугубо всё равно из какого приложения она используется.Не помогает. Приходится собирать приложение, которое может залинковать эту библиотеку. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 12:38 |
|
c++11, std::thread, pthread и чудеса линковки
|
|||
---|---|---|---|
#18+
AklinНет желания ковыряться в исходниках стандарта... С одной стороны это правильно, потому что после такого хочется это развидеть и никогда не пользоваться этим дерьмищем. С другой стороны - полезно для понимания почему никогда не стоит пользоваться этим дерьмищем. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 12:47 |
|
|
start [/forum/topic.php?fid=57&msg=39823981&tid=2017610]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 265ms |
total: | 406ms |
0 / 0 |