Pregunta

Tengo una biblioteca C ++ y una aplicación C ++ que intenta utilizar funciones y clases exportadas desde la biblioteca. La biblioteca se construye bien y la aplicación compila pero no puede enlazar. Los errores que recibo siguen este formulario:

  

app-source-file.cpp :(. text + 0x2fdb): referencia no definida a `lib-namespace :: GetStatusStr (int) '

Las clases en la biblioteca parecen ser resueltas correctamente por el vinculador, pero las funciones libres y los datos exportados (como una tabla de búsqueda de coseno) siempre producen el error anterior.

Estoy usando Ubuntu 8.04 (Hardy), y está actualizado con los últimos paquetes de Ubuntu.

El comando para vincular la biblioteca es (con otras bibliotecas eliminadas):

g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so

El comando para vincular la aplicación es (con otras bibliotecas eliminadas):

g++ -fPIC -Wall -O3  -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question

Finalmente, parece (lo mejor que puedo decir) que los símbolos en cuestión se están exportando correctamente:

nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi
¿Fue útil?

Solución

la U antes de _ZN3lib-namespace12GetStatusStrEi en la salida de nm muestra que el símbolo es indefinido en la biblioteca.

Quizás esté definido en el espacio de nombres incorrecto: parece que lo está llamando en lib-namepace pero podría estar definiéndolo en otro.

Otros consejos

Ha pasado un tiempo, pero si especifica una lib con la opción -l, ¿no tiene el omitir el prefijo lib?

(Cambié el nombre de '' lib-in-question.so '' a '' libfoobar.so '' para una lectura más fácil para el ejemplo a continuación)

g++ -fPIC -Wall -O3  -L~/project/lib/release -lfoobar

o

g++ -fPIC -Wall -O3  ~/project/lib/release/libfoobar.so
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top