我正在编写一个应用程序,我想在rhel7上使用GCC 4.8。我的问题是我需要使用第三方共享库,它是使用在rhel6上构建的GCC 4.4构建的。
答案 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, 并将新旧版本链接在一起 - 我该怎么做? 是否会建议静态链接新版本的工作?
这将是不必要的负担。