# Library problem installing Xilinx: ELF file OS ABI invalid



## caesius (Sep 15, 2010)

I am following the FreeBSD wiki instructions for installing Xilinx ISE form here.

When I try to execute xinfo or xsetup I get the error:


```
> ./bin/lin/xinfo
/usr/home/benjamin/Desktop/xilinx/bin/lin/_xinfo: error while loading shared libraries: /usr/X11R6/lib/libXrender.so.1: ELF file OS ABI invalid
```


```
> ./bin/lin/xsetup 
/usr/home/benjamin/Desktop/xilinx/bin/lin/_xsetup: error while loading shared libraries: /usr/X11R6/lib/libX11.so.6: ELF file OS ABI invalid
>
```

I obviously have x11/libX11 installed. What is this error referring to? Is it something to do with brandelf?

Cheers, Benjamin


----------



## SIFE (Sep 15, 2010)

trt to look in linux emulation folder for libX11.so.6, libXrender.so.1 and the from console :

```
brandelf -t Linux libX11.so.6
brandelf -t LinuxlibXrender.so.1
```


----------



## caesius (Sep 16, 2010)

Thanks, yes I've already tried brandelf'ing things. It made no difference.

Why is it trying to use /usr/X11R6/lib/? Shouldn't it be looking in /compat/usr/local?


----------



## SIFE (Nov 15, 2010)

I have the some problem and question of you.


----------



## cederom (Jun 19, 2011)

I had the same problem. I will try to describe how to solve it.. maybe it will be a good source for Wojtek's wiki page update 

One thing before we start - Linux emulation on FreeBSD uses /usr/compat/linux as the root directory of the emulated Linux system, so all Linux dynamic libraries are referenced to that place (just as chroot) therefore if you need to edit ld.so.conf or similar, remember to pass directories without heading /usr/compat/linux and pass MANDATORY *-r /usr/compat/linux* to */usr/compat/linux/sbin/ldconfig*.

I am working on a version Xilinx_ISE_DS_13.1_O.40d.1.1. There is a lib/lin subdirectory on top of the installation tarball. Copy its content into /usr/compat/linux/usr/lib/xilinx and then append the line /usr/lib/xilinx into /etc/ld.so.conf, or write that line into a new file /usr/compat/linux/etc/ld.so.conf.d/xilinx.conf. This will provide some libraries necessary to run xilinx binaries for Linux. Although xilinx developers provided all dynamic libraries required for binaries to work, the do not anymore, so we need to add them manually...

To refresh the dynamic library cache for Linux run [cmd=]/usr/compat/linux/sbin/ldconfig -r /usr/compat/linux -i[/cmd] Remember to make a backup of that file first - it may come handy to restore/compare dynamic configuration when something goes wrong.

The problem mentioned in this thread about /usr/X11R6/lib/libX11.so.6 can be solved relatively easy - as this library is available in /usr/lib (looking from linux-emulation perspective) and the /usr/X11R6/lib is empty, simply create a symlink that will provide a library at the reuqired location: [cmd=]ln -s /usr/compat/linux/usr/lib /usr/compat/linux/usr/X11R6/lib[/cmd] (how did the xilinx developers build the binary that it looks for a dyamic library only in a specific location totally ignoring its existence in other valid location?!). At this point xilinx should not complain about libX11.so.6.

But it will still complain about 
	
	



```
/usr/X11R6/lib/libgthread-2.0.so.0: ELF file OS ABI invalid
```
 and later 
	
	



```
/usr/X11R6/lib/libglib-2.0.so.0: ELF file OS ABI invalid
```
 Those files are located in /usr/compat/linux/lib, so create symlinks of those files where xilinx binaries want to have them and this will make Xilinx ISE work 

Why those Linux xilinx binaries need to have dynamic libraries at a specific location, although they are available in other valid locations?

Example patching script, started from xilinx ise installation directory, can look as follows:

```
#!/bin/sh
mkdir /usr/compat/linux/usr/lib/xilinx
cp lib/lin/* /usr/compat/linux/usr/lib/xilinx/
echo "/usr/compat/linux/usr/lib/xilinx" >> /usr/compat/linux/etc/ld.so.conf.d/xilinx.conf
mv /usr/compat/linux/usr/X11R6/lib /usr/compat/linux/usr/X11R6/lib_orig
echo "/usr/compat/linux/usr/X11R6/lib_orig" >> /usr/compat/linux/etc/ld.so.conf.d/x11r6_orig.conf
ln -s /usr/compat/linux/usr/lib /usr/compat/linux/usr/X11R6/lib
ln -s /usr/compat/linux/lib/libgthread-2.0.so.0 /usr/compat/linux/usr/X11R6/lib/libgthread-2.0.so.0
ln -s /usr/compat/linux/lib/libglib-2.0.so.0 /usr/compat/linux/usr/X11R6/lib/libglib-2.0.so.0
```

Maybe the script can be simpler and only link necessary files, but there will be much more of them located either in /usr/compat/linux/lib or /usr/compat/linux/usr/lib so I have decided to simply link the whole directory.

Good luck!


----------



## caesius (Jun 19, 2011)

Thanks for that info cederom, I'll give it another shot once I start doing HDL again next semester. I recall trying to get the Linux version of Xilinx going at a place I was working and I ended up having to delete the X11 libraries it supplied and force it to use the system's.

Would be great to have robust and stable HDL tools on FreeBSD :\


----------



## cederom (Jun 19, 2011)

Yeah, it's working fine. The libraries are on the system but in a different place than the binary expects, so simply they need to be linked. It has nothing to do with binary branding. It's about location  I will send an update soon on installing cable drivers, as this part failed for me at the end of installation and I have a USB Platform cable and a Spartan 3A-DSP develkit to test it on.

You can also try open source GHDL: http://ghdl.free.fr/ - there is no port yet for this software, I will prepare one after my diploma thesis is ready (around October).


----------

