我们有一个基于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发行版中运行旧的编译代码?