C++ STL версия контроля версий + повышение
Я создавал библиотеку C++, которую хочу распространять в виде единого файла.so для своих пользователей, и, надеюсь, этот файл.so будет, по большей части, независимым от дистрибутивов. Таким образом, я статически связывал сторонние библиотеки (но все еще динамически связывал со стандартной библиотекой)
Прямо сейчас он прекрасно работает с g++ на CentOS 6.2 (64 бит), но у него есть проблемы с сборкой на CentOS 5.3. Компиляция проходит нормально, но я получаю ошибку компоновщика:
cpu_timer.cpp:(.text+0x288): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<long double>(long double)'
Я провел некоторый поиск по ошибке, и, похоже, проблема связана с версией самой стандартной библиотеки. Мой код, или, вернее, код boost::thread, пытается вызвать более новую версию чего-то, чего нет в стандартной библиотеке, включенной в CentOS 5.3.
Понятный. Так что мне нужно либо:
- Статически ссылаться на стандартную библиотеку C++ (я провел некоторые исследования по этому поводу, и это очень болезненно для 64-битных систем. LibstdC++. A, включенный в большинство 64-битных систем, не собран с -fPIC, а -fPIC на самом деле необходимость делать статические линковки на 64-битных системах. Я бы на самом деле должен был собрать libstdC++.a сам. Тьфу...
- Верните boost::timer к более совместимой версии. Я в основном использую его для переносимых мьютексов, поэтому мне не нужны передовые функции boost::thread. Но это связано со своей проблемой: где на веб-сайте Boost они документируют свои зависимости в стандартной библиотеке (и в каких версиях). Они документируют это вообще? Я не могу найти информацию. Кроме того, это мудрый выбор? Какие еще неприятные сюрпризы может принести мне стандартная библиотека?
Учитывая мою цель (как можно ближе к дистрибутивной агностике), какой маршрут вы бы порекомендовали?
1 ответ
Я бы сказал, что используйте версию Boost, которая достаточно старая, чтобы быть совместимой со всеми дистрибутивами, с которыми вы хотите, чтобы она была совместима.