1

我们有一个基于 Borland Kylix C++ 构建的应用程序。该应用程序仍在使用中,我们维护了一个安装了 Kylix IDE 的 Red Hat 9 虚拟机以继续其开发。我们知道它已经很老了,但有一段时间这是我们的选择。

在 Fedora 21 之前,我们可以毫无问题地运行这个应用程序,但是在这个新版本中,我们的库无法加载,导致分段错误错误。

那是简单地加载库的测试程序:

#include <stdio.h>
#include <dlfcn.h>

void main()
{
  int *p = dlopen("libX.so", RTLD_NOW);
  if (p == NULL)
  {
    printf("Erro = %s\n", dlerror());
  }
}

libX.so 是用 Kylix C++ 构建的。执行时发生错误dlopen。我们不需要加载方法或执行方法来获取错误。使用 strace 分析错误,我们得到:

open("i686/sse2/libborunwind.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("i686/libborunwind.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("sse2/libborunwind.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("libborunwind.so", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P\21\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=27125, ...}) = 0
close(3)                                = 0
mprotect(0xb7170000, 4096, PROT_READ)   = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xb85fbad4} ---
+++ killed by SIGSEGV (core dumped) +++

libborunwind.so是一个 Kylix 运行时库,所以我们没有源代码来查看发生了什么。似乎旧的 Kylix 库与 Fedora 21(libc 等)的新库不兼容。

有没有办法在最近的 Linux 发行版中运行旧的编译代码?

4

0 回答 0