cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Observer
Observer
8,022 Views
Registered: ‎03-02-2015

Shared library missing with Vivado 2014.3 or 2014.4 on RHEL 6.6

Jump to solution

I'm having problems getting either 2014.3 or 2014.4 to work on a Red Hat machine. 2013.2 and 2014.1 are also installed, and they work fine. It's just the two most recent releases which fail.

 

The failure is a symbol lookup error. When I did some detective work, I found that the Xilinx setup script is correctly pointing $LD_LIBRARY_PATH at a directory where there is a library which defines the missing symbol, so somehow it's failing to find the symbol even though it should. Anyone know what's up?

 

[username@machine ~]$ source /home/username/Xilinx/Vivado/2014.4/settings64.sh

[username@machine ~]$ vivado
/home/username/Xilinx/Vivado/2014.4/bin/unwrapped/lnx64.o/vivado: symbol lookup error: /home/username/Xilinx/Vivado/2014.4/lib/lnx64.o/librdi_commonmain.so: undefined symbol: _ZN6XilReg13GetInitStringEv

[username@machine lnx64.o]$ echo $LD_LIBRARY_PATH 
/home/username/Xilinx/Vivado/2014.4/lib/lnx64.o

[username@machine lnx64.o]$ cd /home/username/Xilinx/Vivado/2014.4/bin/unwrapped/lnx64.o/

[username@machine lnx64.o]$ ldd vivado 
linux-vdso.so.1 => (0x00007fff36dff000)
libtcmalloc.so.4 => not found
libboost_signals.so => /usr/lib64/libboost_signals.so (0x00007f7934f1c000)
librdi_common.so => not found
librdi_commonmain.so => not found
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f7934c15000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f79349ff000)
libc.so.6 => /lib64/libc.so.6 (0x00007f793466b000)
libm.so.6 => /lib64/libm.so.6 (0x00007f79343e6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7935152000)

[username@machine ~]$ cd /home/username/Xilinx/Vivado/2014.4/lib/lnx64.o/

[username@machine lnx64.o]$ grep _ZN6XilReg13GetInitStringEv *
Binary file librdi_commonmain.so matches
Binary file librdi_commonxillic.so matches

[username@machine lnx64.o]$ readelf -Ws librdi_commonmain.so | grep _ZN6XilReg13GetInitStringEv
114: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZN6XilReg13GetInitStringEv

[username@machine lnx64.o]$ readelf -Ws librdi_commonxillic.so | grep _ZN6XilReg13GetInitStringEv
424: 000000000003ee30 57 FUNC GLOBAL DEFAULT 10 _ZN6XilReg13GetInitStringEv

[username@machine lnx64.o]$

 

0 Kudos
1 Solution

Accepted Solutions
Highlighted
Scholar
Scholar
14,018 Views
Registered: ‎06-23-2013
Because ldd fails to find the two libraries:

libtcmalloc.so.4 => not found
librdi_common.so => not found
librdi_commonmain.so => not found

This means that the dynamic linker does not find these in the LD_LIBRARY_PATH, or the ones it finds are not the libraries it is looking for (32-bit vs 64-bit).

First try running 'file' on each of the missing libraries. If that does not show you anything, run:

strace -f -o /tmp/strace.out vivado

and then look through the output of strace. Search for where it looks for librdi_common, for instance. That will show you the LD_LIBRARY_PATH it is using.

Let us know what you find,
Daniel

View solution in original post

0 Kudos
3 Replies
Highlighted
Scholar
Scholar
14,019 Views
Registered: ‎06-23-2013
Because ldd fails to find the two libraries:

libtcmalloc.so.4 => not found
librdi_common.so => not found
librdi_commonmain.so => not found

This means that the dynamic linker does not find these in the LD_LIBRARY_PATH, or the ones it finds are not the libraries it is looking for (32-bit vs 64-bit).

First try running 'file' on each of the missing libraries. If that does not show you anything, run:

strace -f -o /tmp/strace.out vivado

and then look through the output of strace. Search for where it looks for librdi_common, for instance. That will show you the LD_LIBRARY_PATH it is using.

Let us know what you find,
Daniel

View solution in original post

0 Kudos
Highlighted
Observer
Observer
7,998 Views
Registered: ‎03-02-2015

Daniel, thanks for the suggestion of using strace. I was able to figure out what's happening by examining the log.

 

It turns out this machine had the AR #56630 tactical patch for 2013.2 installed. It appears that Vivado offers two paths for installing tactical patches: either overwrite original files with patched files, or point $MYVIVADO at the unpacked tactical patch directory. This machine had it installed via the latter method, and $MYVIVADO was getting set regardless of tool version. AR #56630 targeted 2013.2, and its versions of the libraries don't work with sufficiently recent Vivado versions.

 

"unset MYVIVADO ; vivado" got 2014.4 to launch. I'm going to re-do the tactical patch install by overwriting 2013.2 files so we don't have to set $MYVIVADO any more.

 

0 Kudos
Highlighted
Observer
Observer
900 Views
Registered: ‎11-01-2018
What was the solution here? I've installed Vivado 2018 on CentOS 7 and I'm missing those same two libraries
librdi_common
librdi_commonmain

Any follow-up advice on what I can try would be appreciated.
0 Kudos