C++STL版本控制问题+Boost



我一直在构建一个C++库,我想把它作为一个.so文件分发给我的用户,希望这个.so文件在很大程度上与发行版无关。因此,我一直在静态地链接第三方库(但仍然动态地链接到标准库)

目前,它在centos6.2(64位)上使用g++构建良好,但在centos5.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位系统上是一个巨大的痛苦。大多数64位系统中包含的libstdc++.a不是用-fPIC构建的,而-fPIC实际上是在64位系统上进行静态链接的必要条件。我必须自己实际构建libstdc++.a。嗯
  • 将boost::计时器还原为更兼容的版本。我主要将它用于可移植互斥,所以我不需要任何出血边缘的boost::线程功能。但这也带来了自己的问题:在boost网站上,他们在哪里记录了对标准库的依赖关系(以及哪些版本)。他们有记录吗?我似乎找不到信息。此外,这是一个明智的选择吗?标准库还能给我带来什么惊喜呢

考虑到我的目标(尽可能接近发行版无关),你会推荐哪条路线?

我建议使用一个足够旧的Boost版本,它可以与您希望它兼容的所有发行版兼容。

最新更新