¿Cómo trato con los errores de “referencia indefinida a dlopen” al comstackr y usar OpenFST en Ubuntu?

Intentar comstackr y usar OpenFST en Ubuntu 13.10 lleva a vincular errores como “referencias indefinidas a dlopen”. ¿Cómo se arregla esto? La búsqueda en línea sugiere incluir -ldl en la línea de comandos de gcc, pero eso no es suficiente.

Comstackr de la siguiente manera:

 ./configure LDFLAGS=-Wl,--no-as-needed make sudo make install 

Para comstackr su a.cpp que usa la biblioteca, haga

 g++ -I /usr/local/include a.cpp /usr/local/lib/libfst.so -Wl,--no-as-needed -ldl 

Es importante que aparezca -ldl después de -Wl,--no-as-needed .

La ejecución de su progtwig funciona como esperaría del README proporcionado por OpenFST, solo necesita tener /usr/local/lib en su LD_LIBRARY_PATH . Por ejemplo,

 LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" ./a.out 

Como se puede ver en el Catálogo de Reglas Incorporadas :

Vinculando un solo archivo de objeto

n se crea automáticamente desde no ejecutando el enlazador (normalmente llamado ld ) a través del comstackdor de C. La receta precisa utilizada es:

 $(CC) $(LDFLAGS) no $(LOADLIBES) $(LDLIBS) 

y variables utilizadas por las reglas implícitas :

LDFLAGS

Banderas adicionales para dar a los comstackdores cuando se supone que invocan el enlazador, ld , como -L . Las bibliotecas ( -lfoo ) deben agregarse a la variable LDLIBS en su lugar.

Por lo tanto, en este caso -ldl debe establecer o agregar a LDLIBS, no a LDFLAGS.

    Intereting Posts