Как справиться с ошибками «неопределенная ссылка на dlopen» при компиляции и использовании OpenFST в Ubuntu?

Попытка скомпилировать и использовать OpenFST в Ubuntu 13.10 приводит к ошибкам ссылок, таким как «неопределенные ссылки на dlopen». Как можно это исправить? Поиск в Интернете предполагает включение -ldl в командную строку gcc, но этого недостаточно.

2
задан 25 April 2014 в 17:28

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
0
ответ дан 25 April 2014 в 17:28

Как видно в Каталоге Встроенных Правил:

Соединение файла отдельного объекта

n сделан автоматически из n.o путем выполнения компоновщика (обычно называемый ld) через компилятор C. Точный используемый рецепт:

$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)

и переменные, используемые по неявным правилам:

LDFLAGS

Дополнительные флаги для предоставления компиляторам, когда они, как предполагается, вызывают компоновщика, ld, такой как -L. Библиотеки (-lfoo) должен быть добавлен к переменной LDLIBS вместо этого.

Так в этом случае -ldl должен быть установлен или добавлен к LDLIBS, не LDFLAGS.

3
ответ дан 25 April 2014 в 17:28
  • 1
    Я верю that' s столь маленький, как это добирается по умолчанию. There' s размер миниатюры, устанавливающий that' s предполагаемый работать, когда представление установлено на маленький, но это doesn' t, кажется, на самом деле имеют эффект. Можно хотеть зарегистрировать отчет об ошибках. – chaskes 29 October 2015 в 08:32

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

Похожие вопросы: