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
Code:
/usr/X11R6/lib/libgthread-2.0.so.0: ELF file OS ABI invalid
and later
Code:
/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:
Code:
#!/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!