0

我有一个使用 g++ 2.96 版构建的库文件。该库的源代码不可用,也没有原始开发人员的支持。

我想使用最新的 g++ 版本(比如 4.x)将它与我的应用程序链接起来。据我了解,自 gcc veriosn 3.3 起,名称修饰方案已更改。这就是新链接器无法识别旧 lib 文件中的符号的原因。

我在网上做了一些研究,研究了 objcopy、objdump、c++filt 和 nm 等工具,并试图手动查找和解开 lib 文件中的符号,但无济于事。

那么,有没有办法(或工具)将我的旧二进制 lib 文件转换为新的名称修改方案,以便我可以使用更新的编译器链接它?

4

1 回答 1

0

不,这是不可能的。

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

要么获取旧库的源代码,要么使用 g++ 2.96 构建所有内容,或者用具有相同行为的新代码替换旧库。

于 2015-05-27T09:54:20.717 回答