При использовании std::condition_variable::wait при связывании с libstdc++.so.6.0.30 и GLIBCXX_3 используются символы GLIBCXX_3.4.30. Символы .4.11 используются при компоновке с libstdc++.so.6.0.29.
Рассмотрим этот минимальный пример:
Код: Выделить всё
// main.cpp
#include
#include
int main(int argc, char** argv) {
std::mutex mtx;
std::condition_variable cv;
std::unique_lock lck(mtx);
cv.wait(lck);
return 0;
}
- Компилировать с помощью g++-9 main.cpp -o main
- Проверить версии символов GLIBCXX с помощью строк главная | grep GLIBCXX:
Код: Выделить всё
GLIBCXX_3.4.11
GLIBCXX_3.4.30
GLIBCXX_3.4
_ZSt9terminatev@GLIBCXX_3.4
_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@GLIBCXX_3.4.30
_ZSt20__throw_system_errori@GLIBCXX_3.4.11
_ZNSt18condition_variableC1Ev@GLIBCXX_3.4.11
_ZNSt18condition_variableD1Ev@GLIBCXX_3.4.11
При связывании той же программы с libstdc++.so.6.0.29 я получаю этот вывод для струны главная | grep GLIBCXX:
Код: Выделить всё
GLIBCXX_3.4.11
_ZSt20__throw_system_errori@GLIBCXX_3.4.11
_ZNSt18condition_variableC1Ev@GLIBCXX_3.4.11
_ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@GLIBCXX_3.4.11
_ZNSt18condition_variableD1Ev@GLIBCXX_3.4.11
Я ожидаю, что GLIBCXX_3.4.11 Символы используются при связывании с libstdc++.so.6.0.30.
Я ошибаюсь или этого не должно происходить?
Подробнее здесь: https://stackoverflow.com/questions/787 ... st-libstdc