使用GCC 4.4库和GCC 4.8应用程序

时间:2016-12-20 15:49:07

标签: c++ gcc libstdc++ libgcc

我正在编写一个应用程序,我想在rhel7上使用GCC 4.8。我的问题是我需要使用第三方共享库,它是使用在rhel6上构建的GCC 4.4构建的。

1 个答案:

答案 0 :(得分:1)

  

有人建议我在我的应用之间创建一个界面   和图书馆使用extern" C"避免在c ++ 03之间进行ABI问题   到c ++ 11,只在接口中传递简单的C结构。

这是一个有意义的建议,因为在C ++界面中保持ABI兼容性太难了。

  

但他们也建议我可能需要复制和链接   自第三方lib以来,来自rhel6机器的libstdc ++和libgcc   (和我的界面)是使用这些构建的。这是我感到困惑的地方。

libgcc和libstdc ++都保持向后兼容性(除非在GCC5中,但不是你的情况)所以第三方库应该可以正常使用RHEL7库。

  

鉴于libstdc ++的主要版本(libName.so.major.minor.x.z)   和libgcc在rhel6和7上是一样的,我真的需要复制它们   从rhel6到7?

否(见上文)。

  

我不能在rhel6上构建我的界面,只需将其复制即可   第三方lib到rhel7(没有复制旧的libstdc ++ / libgcc)?

是的,这会有用。

  

我的意思是,因为使用旧的libstdc ++ / libgcc构建的东西   应该是向前兼容的,不是吗?

正确(他们通常会说"标准库的新版本是向后兼容的,即使用较旧的库编译的软件将继续工作")。

  

我可以遇到问题(ABI)吗?

如果你以某种方式设法将在一个libstdc ++中创建的STL对象传递给另一个,那么你会遇到奇怪的错误。但是如果你的和第三方库都有纯C接口,这应该不是问题(因为STL对象无法逃脱它们的包含库)。

  

如果我确实需要从rhel6复制libstdc ++和libgcc,   并将新旧版本链接在一起 - 我该怎么做?   是否会建议静态链接新版本的工作?

这将是不必要的负担。