Problems with installing Cadence on Suse 10.1

Status
Not open for further replies.

eenoob

Newbie level 2

Fresh Install of Suse 10.1

with csh

Tried to install ldv5.1, but was given the in-famous " relocation error: ... : symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference" after indicating the directory of the cdrom to install the files from...

Tried "setenv LD_ASSUME_kERNEL 2.x.x", with various kernel versions, all did not work and rendered the c-shell completely not functional with all commands including "ls" generating error similar msgs...

any expertise on this ?

has anyone sucessfully installed any Cadence stuff on suse 10.1 yet ?

wpchan05

Full Member level 4

eenoob said:
Fresh Install of Suse 10.1

with csh

Tried to install ldv5.1, but was given the in-famous " relocation error: ... : symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference" after indicating the directory of the cdrom to install the files from...

Tried "setenv LD_ASSUME_kERNEL 2.x.x", with various kernel versions, all did not work and rendered the c-shell completely not functional with all commands including "ls" generating error similar msgs...

any expertise on this ?

has anyone sucessfully installed any Cadence stuff on suse 10.1 yet ?

I am using SUSE 10, and I got the same problem before. What I did was
setenv LD_ASSUME_KERNEL 2.4.1 in my c-shell before the installation of LDV 5.1. Setting this command to the c-shell should not mess up all the c-shell commands. Anyway, you might try your installation under bash shell envirnoment if you have not done so.

eenoob

Newbie level 2

I tink setenv LD_ASSUME_KERNEL 2.X.X works in SUSE 10, but not in SUSE

10.1...as in 10.1, with whatever Shell you try it on, all of the shell commands will

result in similar erros msgs.

gliss

Did you install the older library compatibility system?

louisnells

Full Member level 4

Hi
Its a bad Idea to install the older library support. I will say never do it unless it extreamly necessary like KDE libraries.

I have been doing a cool work around for this kind of this problem for almost 4 years.
1) Get the source code of the library.
2) Install the library in a local folder (may be you should use somethng like --prefix)
3) Then make a script to add the older libraries to the environment variables (like PATH, LD_LIBRARY_PATH, ....)
4) Then set some work around to run the application in an environment with the older libraries (ie: first run the above script in a local scope and then run the application).

I am using Debian. I have done the same on RedHat too. But its very hard to make things in RedHat (because most of the time dependancies used to be broken). One with a good expertise in LINUX don't even try the above method.

tlihu

Full Member level 6

SUSE 10.1 using glibc 2.4, which is not compatible with most of the EDA tools today. So go back to 10.0.

forthy

Newbie level 1

After unsuccessful discussion with Cadence, I found a way to do it (with the help of the SuSE Linux mailing list): User clone() with the CLONE_NEWNS flag to create a new namespace, mount a directory with MS_BIND over /lib to point to the old libraries (copied into e.g. /cad/cds-libs from SuSE 10.0 or older), and enjoy. See below. The wrapper program (I call it cdsshell) needs to be set-uid root (no setgid), and releases its priviledge as soon as possible. Start it without arguments, and it opens a shell, start it with arguments, and it execs to the program. Enjoy.

Code:
/* old library wrapper */

#include <stdio.h>
#include <sched.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/mount.h>

typedef struct {
int argc;
char ** argv;
char ** env;
} args;

int clonelib(args * environ)
{
/* or whatever path you choose for your compatibility libs,
but make that hardcoded here! */
setuid(getuid()); /* drop privilege */
if(environ->argc == 1) {
environ->argv[0] = "/bin/bash";
execve("/bin/bash", environ->argv, environ->env);
} else {
execve(environ->argv[1], environ->argv+1, environ->env);
}
}

int main(int argc, char** argv, char ** env)
{
pid_t pid;
int status;
args environ = { argc, argv, env };
clone(clonelib, malloc(0x1008)+0x1000, CLONE_NEWNS | SIGCHLD, &environ);
wait(&status);
return status;
}

gliss

If you use your system for other applications that rely on /lib doing that may not be an option.
I've been using the older compatibility rpms with RHEL 3 and haven't had a problem.

Status
Not open for further replies.