用LSB C ++编译器构buildBoost

我想用Linux Standard Base http://www.linuxfoundation.org/collaborate/workgroups/lsb中的 LSB C ++编译器构build我的程序。 程序取决于使用gcc 4.4版本构build的Boost库。 编译失败。 是否有可能用LSB C ++编译器构buildBoost库? 另外,是否有可能build立一些旧的GCC版本的Boost库,build议哪个版本? 我的最终目标是让我的可执行文件和第三方Boost库在大多数Linux发行版上运行。

一般来说,可以做些什么来获得更好的Linux发行版的二进制兼容性,根据Boost库开发C ++闭源应用程序?

LSB C ++编译器实际上不是一个编译器。 lsbc++可执行文件是安装在系统上的GCC编译器的封装(实际的编译器可以通过--lsb-cxx选项来控制)。 你很可能会进入boost build system来调用LSB包装器而不是本地的gcc编译器。

所以可能出现的问题很可能不是LSB编译器不能编译语言结构,而是存在一些链接问题。

例如,默认情况下,LSB编译器会丢弃代码所链接的任何共享库,除非它们属于LSB。 如果BOOST依靠这样的库,这可能会导致链接错误。 这可以通过LSBCC_SHAREDLIBS环境变量来控制,但是您应该确保将这些库与您的产品一起发货。

另一个问题是LSB落后于GCC编译器发布(而BOOST可能会爬到编译器的所有黑暗角落)。 据我所知,GCC 4.4没有被充分测试,所以你最好用4.3编译器来试试。

而且Google似乎没有发现任何与LSBCC建立提升有关的东西,所以如果你能做到这一点,请分享你的经验,例如,作为你自己的问题的答案。

我最近打电话来做这件事情,如果其他人使用这些是我遵循的步骤:

  • 下载并安装LSB SDK
  • 下载一个版本的提升和提取到/ opt / boost / boost_ <版本>(我用1.43)
  • 确保安装了libbz2-dev。
  • Bootstrap与
 cd /opt/boost/boost_<version> ./bootstrap.sh --prefix=/opt/boost --without-libraries=python,mpi --without-icu 
  • 编辑/opt/boost/boost_<version>/project-config.jam并添加行
 using gcc : : /opt/lsb/bin/lsbc++ : <cflags>-U_GNU_SOURCE <cxxflags>-U_GNU_SOURCE ; 

靠近文件的顶部。 请注意,如果您在其他文件之一bjam读取其配置文件中的使用声明,则会失败,您可以传递--debug-configuration以了解它正在读取哪些文件。

 ./bjam cflags=-fPIC cxxflags=-fPIC linkflags=-fPIC install 

我没有试图让Python或MPI库工作,也没有尝试让ICU与boost.regex库一起工作。 后者可能是使用LSB工具集构建ICU库的静态版本的一种情况。

-fPIC对于32位Linux不是必须的,但是如果要将静态库链接到64位Linux的共享库,则必须-fPIC

最终结果应该是/opt/boost/lib二进制文件和/opt/boost/include头文件,显然,您可以修改前缀以适合您的偏好。 在将所有的代码移植到LSB之前,我还有相当多的工作要做,所以我无法报告认证流程的进展情况。