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


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
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