2015-05-27 26 views
0

我有一个使用g ++版本2.96构建的库文件。 lib的源代码不可用,也没有原始开发人员的支持。如何将g ++ 2.96的lib版本翻译成新的BFD格式?

我想它采用了最新的G ++版本(4.x的说)我的应用程序联系起来。据我了解,自gcc veriosn 3.3开始,名称修改方案已发生变化。这就是为什么新的链接器不能识别旧的lib文件中的符号。

我已经做了一些关于网络的研究,并研究了像objcopy,objdump,C++ filt和nm等工具,并尝试手动查找和取消lib文件中的符号,但无济于事。

那么,有没有一种方式(或工具),以改变我的老的二进制库文件,以新名称重整方案,所以我可以使用新的编译器链接吗?

回答

0

不,这是不可能的。

你不能只是翻译mangled的名字,还有很多其他的东西在g ++ 2.96和g ++ 4.x之间不兼容,包括对象的布局,异常处理机制,标准库实现,虚函数是如何工作等

要么得到的源代码,旧的lib,或相克创造一切++ 2.96,或更换旧的lib与具有相同行为的新代码。

+0

好约翻译成稍微旧版本如gcc 3.4是什么?那也不可能? –

+0

3.4与4.x兼容,但即使对于3.3或其他版本,也不可能在不兼容的ABI之间进行转换。不可能。放弃。 –

+0

感谢您的及时回复。只是好奇,如果它不是一个C++库,而只是一个普通的C库,你的答案会是相同的。它仍然不可能吗? –