История изменений
Исправление Deleted, (текущая версия) :
При чём здесь clang? Я всё компилирую через gcc, а линкер там bfd. Моя библиотека (мой форк чужой библиотеки) использует LLVM для некоторых вычислений. Когда я использовал livstdc++.so.6, всё работало нормально, когда стал использовать libstdc++.a, стала вылезать эта ошибка. Если llvm я убираю, ошибка тут же пропадает, и всё работает статически.
Пардон, я неверно понял проблему.
Тогда все чуть «понятнее»:
- в libstdc++.so есть
std::system_category()
, потому-что TL;DR он нужен для совместимости по ABI. - в libstdc++.a НЕТ
std::system_category()
, потому-что при сборке актуальным компилятором с актуальными хидерами стандартной библиотеки ссылки на такой символ не возникает (инлайнится, либо получаетсяstd::_V1::system_category()
илиstd::_V2::system_category()
). - а в библиотеках LLVM такая ссылка есть, так как они собраны c другими хидерами стандартной библиотеки C++ и/или с другими опциями (другой стандарт С++).
Варианта три:
- отказаться от статической линковки.
- пересобрать LLVM.
- сделать заглушку для
std::system_category()
(и лучше пометить её посредством__attribute__((weak))
).
Исходная версия Deleted, :
При чём здесь clang? Я всё компилирую через gcc, а линкер там bfd. Моя библиотека (мой форк чужой библиотеки) использует LLVM для некоторых вычислений. Когда я использовал livstdc++.so.6, всё работало нормально, когда стал использовать libstdc++.a, стала вылезать эта ошибка. Если llvm я убираю, ошибка тут же пропадает, и всё работает статически.
Пардон, я неверно понял проблему.
Тогда все чуть «понятнее»:
- в libstdc++.so есть
std::system_category()
, потому-что TL;DR он нужен для совместимости по ABI. - в libstdc++.a НЕТ
std::system_category()
, потому-что при сборке актуальным компилятором с актуальными хидерами стандартной библиотеки ссылки на такой символ не возникает (инлайнится, либо получаетсяstd::_V1::system_category()
илиstd::_V2::system_category()
). - а в библиотеках LLVM такая ссылка есть, так как они собраны c другими хидерами стандартной библиотеки C++.
Варианта три:
- отказаться от статической линковки.
- пересобрать LLVM.
- сделать заглушку для
std::system_category()
(и лучше пометить её посредством__attribute__((weak))
).