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 [file]/usr/compat/linux[/file] 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 [file]ld.so.conf[/file] or similar, remember to pass directories without heading [file]/usr/compat/linux[/file] and pass MANDATORY [file]-r /usr/compat/linux
[/file] to [FILE]/usr/compat/linux/sbin/ldconfig
I am working on a version Xilinx_ISE_DS_13.1_O.40d.1.1. There is a [file]lib/lin[/file] subdirectory on top of the installation tarball. Copy its content into [file]/usr/compat/linux/usr/lib/xilinx[/file] and then append the line [file]/usr/lib/xilinx[/file] into [file]/etc/ld.so.conf[/file], or write that line into a new file [file]/usr/compat/linux/etc/ld.so.conf.d/xilinx.conf[/file]. This will provide some libraries necessary to run [FILE]xilinx[/FILE] binaries for Linux. Although [FILE]xilinx[/FILE] 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 [file]/usr/X11R6/lib/libX11.so.6[/file] can be solved relatively easy - as this library is available in [file]/usr/lib[/file] (looking from linux-emulation perspective) and the [file]/usr/X11R6/lib[/file] 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 [FILE]xilinx[/FILE] 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 [FILE]xilinx[/FILE] should not complain about [FILE]libX11.so.6[/FILE].
But it will still complain about
- Code: Select all
/usr/X11R6/lib/libgthread-2.0.so.0: ELF file OS ABI invalid
- Code: Select all
/usr/X11R6/lib/libglib-2.0.so.0: ELF file OS ABI invalid
Those files are located in [file]/usr/compat/linux/lib[/file], so create symlinks of those files where [FILE]xilinx[/FILE] binaries want to have them and this will make Xilinx ISE work
Why those Linux [FILE]xilinx[/FILE] binaries need to have dynamic libraries at a specific location, although they are available in other valid locations?
Example patching script, started from [FILE]xilinx[/FILE] [FILE]ise[/FILE] installation directory, can look as follows:
- Code: Select all
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 [file]/usr/compat/linux/lib[/file] or [file]/usr/compat/linux/usr/lib[/file] so I have decided to simply link the whole directory.