Как бороться с ошибками "неопределенная ссылка на dlopen" при компиляции и использовании OpenFST в Ubuntu?
Попытка скомпилировать и использовать OpenFST в Ubuntu 13.10 приводит к ошибкам ссылок, таким как "неопределенные ссылки на dlopen". Как это исправить? Поиск в Интернете предлагает в том числе -ldl
в командной строке gcc, но этого недостаточно.
2 ответа
Скомпилируйте следующим образом:
./configure LDFLAGS=-Wl,--no-as-needed
make
sudo make install
Для компиляции вашего a.cpp
который использует библиотеку, сделать
g++ -I /usr/local/include a.cpp /usr/local/lib/libfst.so -Wl,--no-as-needed -ldl
Важно -ldl
появляется после -Wl,--no-as-needed
,
Запуск вашей программы работает так, как вы ожидаете от README, предоставляемого OpenFST, вам просто нужно иметь /usr/local/lib
в вашем LD_LIBRARY_PATH
, Например,
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" ./a.out
Как видно из каталога встроенных правил:
Связывание одного объектного файла
n
производится автоматически изn.o
запустив компоновщик (обычно называетсяld
через компилятор C. Точный рецепт используется:$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)
и переменные, используемые неявными правилами:
LDFLAGS
Дополнительные флаги для компиляторов, когда они должны вызывать компоновщик,
ld
, такие как-L
, Библиотеки (-lfoo
) следует добавить к переменной LDLIBS.
Так что в этом случае -ldl
должен быть установлен или добавлен в LDLIBS, а не LDFLAGS.