Dynamic Linking – How to Resolve ‘Undefined Reference to dlopen’ Errors in OpenFST on Ubuntu

dynamic-linking

Trying to compile and use OpenFST on Ubuntu 13.10 leads to link errors like "undefined references to dlopen". How does one fix this? Searching online suggests including -ldl in the gcc command line, but that is not sufficient.

Best Answer

Compile as follows:

./configure LDFLAGS=-Wl,--no-as-needed
make
sudo make install

To compile your a.cpp which uses the library, do

g++ -I /usr/local/include a.cpp /usr/local/lib/libfst.so -Wl,--no-as-needed -ldl

It is important the -ldl appears after -Wl,--no-as-needed.

Running your program works as you'd expect from the README provided by OpenFST, you just need to have /usr/local/lib in your LD_LIBRARY_PATH. For example,

LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" ./a.out
Related Question