Попытка скомпилировать и использовать OpenFST в Ubuntu 13.10 приводит к ошибкам ссылок, таким как «неопределенные ссылки на dlopen». Как можно это исправить? Поиск в Интернете предполагает включение -ldl
в командную строку gcc, но этого недостаточно.
Скомпилируйте следующим образом:
./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.