Installation Sybase 12.5安装(SunOS)上错误的系统调用(内核转储)

Installation Sybase 12.5安装(SunOS)上错误的系统调用(内核转储),installation,system,call,solaris,sap-ase,Installation,System,Call,Solaris,Sap Ase,我试图在Sun OS Solaris 11计算机上安装Sybase ASE 12.5.4,但在启动安装文件时收到以下消息: -bash-4.1$ ./setup InstallShield Wizard Initializing InstallShield Wizard... Searching for Java(tm) Virtual Machine... Bad System Call (core dumped) 你知道这是什么原因吗?我想对它进行跟踪,看看到底缺少了什么,但我找不到如

我试图在Sun OS Solaris 11计算机上安装Sybase ASE 12.5.4,但在启动安装文件时收到以下消息:

-bash-4.1$ ./setup
InstallShield Wizard

Initializing InstallShield Wizard...

Searching for Java(tm) Virtual Machine...
Bad System Call (core dumped)
你知道这是什么原因吗?我想对它进行跟踪,看看到底缺少了什么,但我找不到如何查找

谢谢你的帮助。
干杯

不要在生产系统上使用此黑客

Solaris 11中的许多系统调用已被弃用,
access
似乎已被删除:

$ grep access /usr/include/sys/syscall.h 
#define SYS_faccessat   45
其中一些仍然可以从Solaris 10品牌区域访问,有些似乎永远消失了。相反,您必须将“at”-函数与
atfdcwd
param一起使用,在您的情况下,它是
faccessat
。这一变化被libc隐藏了起来,但如果Sybase带来了自己的libc,那么情况就更糟了,如果他们静态地链接到libc,情况就更糟了

如果
access
在他们自己的libc中是一个共享库函数,那么您仍然可以使用
LD_PRELOAD
hack来解决这个问题。编写以下源代码:

#include <unistd.h>
#include <sys/fcntl.h>

int access(const char *fname, int amode) {
        return (faccessat(AT_FDCWD, fname, amode, 0));
}
导出
LD\u预加载
变量:

$ export LD_PRELOAD=./libaccess.so
并祈求好运,因为它可能会在另一个系统调用中失败,或者您使用了错误的编译器,等等。请注意,Sybase二进制文件可能也无法正确运行


我警告过生产系统上的黑客吗?相反,请使用品牌Solaris 10 zones或Solaris 10 LDOM/VMs请勿在生产系统上使用此攻击

Solaris 11中的许多系统调用已被弃用,
access
似乎已被删除:

$ grep access /usr/include/sys/syscall.h 
#define SYS_faccessat   45
其中一些仍然可以从Solaris 10品牌区域访问,有些似乎永远消失了。相反,您必须将“at”-函数与
atfdcwd
param一起使用,在您的情况下,它是
faccessat
。这一变化被libc隐藏了起来,但如果Sybase带来了自己的libc,那么情况就更糟了,如果他们静态地链接到libc,情况就更糟了

如果
access
在他们自己的libc中是一个共享库函数,那么您仍然可以使用
LD_PRELOAD
hack来解决这个问题。编写以下源代码:

#include <unistd.h>
#include <sys/fcntl.h>

int access(const char *fname, int amode) {
        return (faccessat(AT_FDCWD, fname, amode, 0));
}
导出
LD\u预加载
变量:

$ export LD_PRELOAD=./libaccess.so
并祈求好运,因为它可能会在另一个系统调用中失败,或者您使用了错误的编译器,等等。请注意,Sybase二进制文件可能也无法正确运行


我警告过生产系统上的黑客吗?相反,请使用品牌Solaris 10 zones或Solaris 10 LDOM/VM谢谢大家的回复

迈奥特说得对:

许多系统调用在Solaris 11中被弃用,access似乎已被删除

因此,我的问题似乎与Sybase ASE 12.5.4和Solaris 11之间的不兼容有关,如下链接所示:

Sybase ASE 12.5.4与Solaris 2.8(因此是Solaris 8)兼容,我从SAP论坛上了解到,它与Solaris 9 100%兼容,很可能也与Solaris 10兼容,但很明显,它似乎与Solaris 11不兼容

我已经成功地从Solaris 10机器上启动了安装程序,它似乎工作得非常好

谢谢你的帮助。
问候,

谢谢大家的回复

迈奥特说得对:

许多系统调用在Solaris 11中被弃用,access似乎已被删除

因此,我的问题似乎与Sybase ASE 12.5.4和Solaris 11之间的不兼容有关,如下链接所示:

Sybase ASE 12.5.4与Solaris 2.8(因此是Solaris 8)兼容,我从SAP论坛上了解到,它与Solaris 9 100%兼容,很可能也与Solaris 10兼容,但很明显,它似乎与Solaris 11不兼容

我已经成功地从Solaris 10机器上启动了安装程序,它似乎工作得非常好

谢谢你的帮助。
关于,

考虑在或处询问您的问题。您还拥有一个coredump文件(通常写入故障应用程序的工作目录,否则请检查
coreadm
),通过运行
mdb core
进行检查,并在调试器中使用
$c
命令--它将为您提供线索,您需要什么系统调用。我建议检查Sybase兼容性矩阵,因为Solaris 11是在ASE 12.5.4之后发布的。它们可能不兼容。谢谢您的回复myaut<代码>mdb核心
`以以下行完成:ffbfee08 access+8(baeb9、89bb4、ba4b0、ba4b0、0、9)和ffbfef00 u 1mplateFormImplCreateTemp子目录6f_nHSString_uu+0x30(baeb9、1、0、b8800、0、b99a8)。你知道这意味着什么吗?谢谢。考虑一下你的问题。您还拥有一个coredump文件(通常写入故障应用程序的工作目录,否则请检查
coreadm
),通过运行
mdb core
进行检查,并在调试器中使用
$c
命令--它将为您提供线索,您需要什么系统调用。我建议检查Sybase兼容性矩阵,因为Solaris 11是在ASE 12.5.4之后发布的。它们可能不兼容。谢谢您的回复myaut<代码>mdb核心
`以以下行完成:ffbfee08 access+8(baeb9、89bb4、ba4b0、ba4b0、0、9)和ffbfef00 u 1mplateFormImplCreateTemp子目录6f_nHSString_uu+0x30(baeb9、1、0、b8800、0、b99a8)。你知道这意味着什么吗?谢谢。这是C代码——GCC或Solaris Studio都不重要。重要的是32位和64位库。在Solaris上使用32位库设置
LD_PRELOAD
,64位二进制文件将不会运行。将其设置为64位库,32位二进制文件将不会运行。使用
LD\u PRELOAD\u 64
LD\u PRELOAD\u 32
。感谢您的回复。不过我很惊讶,我的客户确认他们在Solaris 11系统上有这个Sybase版本。我运行的是Solaris 11.2(sparcv9),可能从11.1或11.2开始就不推荐使用了?我将尝试解决方案,并尝试其他Solaris版本。我现在尝试了解决方案,但它不起作用。我创建了C文件,并按照您的建议使用gcc进行编译。我导出了变量并再次运行了安装程序,得到了相同的消息。我试过了