Compiling mex file that depends on external libraries with extension .so.n

I have written a file myprog.cpp and is to be compiled in MATLAB. The program has external library dependencies libnewfile1.so and libnewfile2.so.3. I compiled using following instruction from MATLAB command window.
mex myprog.cpp -lnewfile1.so -lnewfile2.so.3 -L"path to library folder"
I get he following error while compiling.
Error using mex
/usr/bin/ld: cannot find -lnewfile1
/usr/bin/ld: cannot find -lnewfile2.so.3
collect2: error: ld returned 1 exit status
Could anyone please tell me how to compile a cpp file that has external library dependencies?
Later I tried adding the path to LD_LIBRARY_PATH using setenv and getenv shows the above path in LD_LIBRARY_PATH. But still I get the same error.

3 Comments

Shouldn't you be using
-llibnewfile1.so -llibnewfile2.so
? It is a while since I have linked a mex against external libraries, though my case dlls, but you need to put the full name of the library file I am fairly sure.
No I still get the error:
Error using mex
/usr/bin/ld: cannot find -llibnewfile1.so
/usr/bin/ld: cannot find -llibnewfile2.so.3
collect2: error: ld returned 1 exit status
I did solve it. The problem was Matlab does not recognise libraries with extensions other than .so; Hence I renamed the library to .so and that solved the issue.

Sign in to comment.

Answers (1)

Bit late to the party, but the answer is that -l adds a "lib" prefix and a ".so" suffix to its argument, so linking with -Lpath/to/library/dir -lnewfile1 -lnewfile2 will do the trick.
Note that Matlab may add requirements to library-files such as position-independent code, which may or may not have been used while compiling the library.

Categories

Find more on MATLAB Compiler in Help Center and File Exchange

Asked:

on 26 May 2016

Answered:

on 21 Nov 2017

Community Treasure Hunt

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

Start Hunting!