新发行版导致旧二进制文件出现分段错误

新发行版导致旧二进制文件出现分段错误

我有一个年长的(~1999 年)不幸的商业图形程序,它在 gcc 最高 3.4.6 (CentOS 4.8) 的系统上运行得很好。然而,在我尝试过的所有基于 gcc 4.* 的发行版中,程序都会因“分段错误”而失败(我尝试了不同版本的 CenOS、Sebian 和 SUSE)。

该软件有较新的版本(我们甚至有许可证),具有大量新选项,因此对于日常工作来说,我们可以得到很好的服务。然而,旧版本有一个很好的选项,可以将图形导出为 x 图形,而新版本仅基于 PpenGL。即使 x-graphic 很难看(对不起这个形容词),如果您通过 DSL 线路工作,速度也会快得多。

安装过程中唯一缺少的库是:libXp.so.6、libXmu.so.6 和 mesa3。我使用标准存储库安装它们没有任何问题。

我尝试过strace这个错误,但在加载所有必需的库后,程序只是停止而没有给我太多信息:

open("/lib/libuuid.so.1", O_RDONLY)     = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300\17\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=15200, ...}) = 0
mmap2(NULL, 17828, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff7464000
mmap2(0xf7468000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3) = 0xfffffffff7468000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7463000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7462000
set_thread_area(0xff8de9b4)             = 0
mprotect(0xf746c000, 4096, PROT_READ)   = 0
mprotect(0x439000, 8192, PROT_READ)     = 0
mprotect(0xf74dc000, 4096, PROT_READ)   = 0
mprotect(0xf763f000, 1032192, PROT_READ|PROT_WRITE) = 0
mprotect(0xf763f000, 1032192, PROT_READ|PROT_EXEC) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Segmentation fault

有人知道如何让这个程序在较新的发行版上运行吗?

ps 我没有它的来源。建议使用来源,卢克!!对我不起作用。

pss 对于好奇的人 - 该软件称为 gaussview v2

答案1

我的建议是安装一个较旧的发行版(CentOS 4,如果您习惯的话)chroot并在那里运行您的应用程序。它会占用几 GB 的磁盘空间,但它可能比找到一种使二进制文件与当前库一起工作的方法要少得多。

我没有提供在 chroot 中安装 CentOS 的程序。这手动安装说明应该是一个很好的起点 - 跳过有关使安装可引导的部分并设置 chroot。您可以使用施鲁特为了使这更容易(教程)。

相关内容