我正在尝试重用使用 Linux GCC 2.95.2 构建的旧静态库。我正在使用来自 32 位 Ubuntu 发行版的最新编译器 (GCC 4.6)。该库是用 C++ 编写的。我在链接封装在类中的函数时遇到问题。
我猜符号的命名已经改变。
http://www.qnx.com/developers/docs/6.3.2/momentics/compatibility/about.html#C++_code:GCC 2.95.3(来自 6.2.1 或 6.3)和 GCC 3.3.5 使用不同C++ ABI 并具有不同的名称修饰。因此,您无法将使用 GCC 2.95.3 构建的 C++ 二进制文件(对象、可执行文件、库)与使用 GCC 3.3.5 构建的二进制文件链接起来。
ld 的错误输出为:
未定义对“foo1::Bar()”的引用(foo1 类;成员栏)
使用工具 mn 可以读出符号。匹配的符号以不同的方式命名:
酒吧__4Foo1
问题:有没有办法重命名库文件中的符号?或者我可以强制 ld 接受旧的命名格式吗?