Как бороться с ошибками "неопределенная ссылка на 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.

Другие вопросы по тегам