symbol lookup error: undefined symbol , upon calling C executable from matlab using system command

151 views (last 30 days)
Upon giving the following command from Matlab command prompt, I get this error:
>>[status, result] = system('./testGEA outDataTest1.txt')
status =
127
result =
./testGEA: symbol lookup error: /home/swagatika/softwares/qvision.0.8.0/lib/libqvision.so.0: undefined symbol: _ZN12QApplication10commitDataER15QSessionManager
testGEA is an executable file compiled using Qvision library (link : http://qvision.sourceforge.net/testGEA_8cpp.html)
I can successfully execute the command from Linux(ubuntu 10.10) terminal, but calling from Matlab fails.
Please help.
Thanks.

Accepted Answer

Walter Roberson
Walter Roberson on 25 Feb 2012
Possibly a badly linked library http://nrcw.com/?p=546
The symbol might be defined in a library that does not happen to be on the LD_LIBRARY_PATH that is used by MATLAB.
The script that starts MATLAB often sets up LD_LIBRARY_PATH
You could probably use "ldd" to track down which library is supplying the symbol when you execute from the terminal.
  2 Comments
Swagatika
Swagatika on 26 Feb 2012
I also used nm which gives U which means that the symbol is undefined.
$ nm -D /home/swagatika/softwares/qvision.0.8.0/lib/libqvision.so.0 | grep _ZN12QApplication10commitDataER15QSessionManager
U _ZN12QApplication10commitDataER15QSessionManager

Sign in to comment.

More Answers (4)

Swagatika
Swagatika on 1 Mar 2012
Hi,
I could sort out the issue. I found out that doing ldd in testGEA in terminal and in matlab gives different results:
So, there were some libararies which were being linked from different paths for the 2 cases(terminal and matlab). That means the symbol ZN12QApplication10commitDataER15QSessionManager was being defined in one of the libaries being linked when you used terminal, but was undefined in the same library ( but different path) in matlab.
so I did nm for each of the path that ldd showed : and I found: $ nm -D /usr/lib/libQtGui.so.4 | grep _ZN12QApplication10commitDataER15QSessionManager0012d1f0 T _ZN12QApplication10commitDataER15QSessionManager
nm -D /usr/lib/libqvision.so.0 | grep _ZN12QApplication10commitDataER15QSessionManager U _ZN12QApplication10commitDataER15QSessionManager
So the symbol is defined in /usr/lib/libQtGui.so.4, and is in undefined state in /usr/lib/libqvision.so.0.
When I checked in Matlab (!ldd ./testGEA), libQtGui.so.4 was being linked from another path ~/softwares/matlab/bin/glnx86/libQtGui.so.4, and it did not have the symbol. So Matlab was searching for the symbol in another library where it was present in libqvision.so.0 in "Undefined" state and throwing error. So the solution was to delete libQtGui.so.4 from ~/softwares/matlab/bin/glnx86/. And now, libQtGui.so.4 was taken from path /usr/lib/ where the symbol was present. And it got solved!!
Thanks for your help...
Regards, Swagatika


Swagatika
Swagatika on 29 Feb 2012
Hey, I get the following, can this provide any clue in some way?
~/softwares/qvision.0.8.0/examples/testGEA$ nm -D /usr/lib/libQtGui.so.4 | grep _ZN12QApplication10commitDataER15QSessionManager 0012d1f0 T _ZN12QApplication10commitDataER15QSessionManager

Swagatika
Swagatika on 29 Feb 2012
doing ldd in testGEA in terminal and in matlab gives different results:
from terminal:
:~/softwares/qvision.0.8.0/examples/testGEA$ ldd testGEA
linux-gate.so.1 => (0x0097a000)
libgsl.so.0 => /usr/lib/libgsl.so.0 (0x00179000)
libgslcblas.so.0 => /usr/lib/libgslcblas.so.0 (0x00110000)
libqvision.so.0 => /home/swagatika/softwares/qvision.0.8.0/lib/libqvision.so.0 (0x00464000)
libQtXml.so.4 => /usr/lib/libQtXml.so.4 (0x00366000)
libQtOpenGL.so.4 => /usr/lib/libQtOpenGL.so.4 (0x00687000)
libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0x0097b000)
libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0x028ed000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0x003a9000)
libGL.so.1 => /usr/lib/mesa/libGL.so.1 (0x0076b000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00419000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x007be000)
libm.so.6 => /lib/libm.so.6 (0x00433000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x008a9000)
libc.so.6 => /lib/libc.so.6 (0x03ae2000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x008c5000)
libdl.so.2 => /lib/libdl.so.2 (0x00143000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00147000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x118b3000)
libQtDBus.so.4 => /usr/lib/libQtDBus.so.4 (0x1d05e000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x0093c000)
libaudio.so.2 => /usr/lib/libaudio.so.2 (0x1cd51000)
libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x1ed67000)
libpng12.so.0 => /lib/libpng12.so.0 (0x11c21000)
libz.so.1 => /lib/libz.so.1 (0x0cd57000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x0d78a000)
libSM.so.6 => /usr/lib/libSM.so.6 (0x00151000)
libICE.so.6 => /usr/lib/libICE.so.6 (0x090b1000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x018ae000)
libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x00459000)
librt.so.1 => /lib/librt.so.1 (0x0096c000)
libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x0045e000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x07344000)
libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1 (0x0c79c000)
libdrm.so.2 => /lib/libdrm.so.2 (0x086c2000)
/lib/ld-linux.so.2 (0x0015b000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x1be8a000)
libexpat.so.1 => /lib/libexpat.so.1 (0x120bf000)
libXt.so.6 => /usr/lib/libXt.so.6 (0x15f63000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00975000)
libpcre.so.3 => /lib/libpcre.so.3 (0x17efe000)
libuuid.so.1 => /lib/libuuid.so.1 (0x04b66000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x0c617000)
from matlab:
!ldd testGEA
linux-gate.so.1 => (0x00df9000)
libgsl.so.0 => /usr/lib/libgsl.so.0 (0x002e9000)
libgslcblas.so.0 => /usr/lib/libgslcblas.so.0 (0x00110000)
libqvision.so.0 => /home/swagatika/softwares/qvision.0.8.0/lib/libqvision.so.0 (0x006c4000)
libQtXml.so.4 => /home/swagatika/softwares/matlab/bin/glnx86/libQtXml.so.4 (0x00e27000)
libQtOpenGL.so.4 => /home/swagatika/softwares/matlab/bin/glnx86/libQtOpenGL.so.4 (0x00143000)
libQtGui.so.4 => /home/swagatika/softwares/matlab/bin/glnx86/libQtGui.so.4 (0x00e6a000)
libQtCore.so.4 => /home/swagatika/softwares/matlab/bin/glnx86/libQtCore.so.4 (0x00909000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0x004d8000)
libGL.so.1 => /usr/lib/mesa/libGL.so.1 (0x001b6000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00209000)
libstdc++.so.6 => /home/swagatika/softwares/matlab/sys/os/glnx86/libstdc++.so.6 (0x00548000)
libm.so.6 => /lib/libm.so.6 (0x00d18000)
libgcc_s.so.1 => /home/swagatika/softwares/matlab/sys/os/glnx86/libgcc_s.so.1 (0x00223000)
libc.so.6 => /lib/libc.so.6 (0x00b1c000)
libz.so.1 => /lib/libz.so.1 (0x0022e000)
librt.so.1 => /lib/librt.so.1 (0x00243000)
libdl.so.2 => /lib/libdl.so.2 (0x0024c000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00de5000)
libfreetype.so.6 => /home/swagatika/softwares/matlab/bin/glnx86/libfreetype.so.6 (0x00250000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00d7c000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x002ce000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x1f3b4000)
libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x0064f000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x002de000)
libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1 (0x00631000)
libdrm.so.2 => /lib/libdrm.so.2 (0x00637000)
/lib/ld-linux.so.2 (0x008eb000)
libexpat.so.1 => /home/swagatika/softwares/matlab/bin/glnx86/libexpat.so.1 (0x00653000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x0067e000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x002e4000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00641000)
Matlab takes many shared libraries from its own path matlab/bin/glnx86/ which are otherwise taken from /usr/lib if we check at terminal. But qvision.so.0 is taken from its actual path.
I created a soft link for the same in /usr/lib. still the same error comes
  1 Comment
Swagatika
Swagatika on 29 Feb 2012
I tried running the executable in another system and I got the following error:
/Desktop/try$ ./testGEA_API0 problem-138-19878-pre.txt
./testGEA_API0: error while loading shared libraries: libqvision.so.0: cannot open shared object file: No such file or directory

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!