¿Cómo encontrar la biblioteca, que contiene la definición de función particular? Estoy obteniendo el error del enlazador.pregunta del sistema de compilación GNU
Respuesta
Puede utilizar la herramienta nm
de línea de comandos para enumerar los símbolos exportados en los binarios:
~/src> cat nm-test.c
static int plus_four(int x)
{
return x + 4;
}
int sum_plus_four(int a, int b)
{
return plus_four(a + b);
}
int product_plus_four(int a, int b)
{
return plus_four(a * b);
}
~/src> gcc -c nm-test.c
~/src> nm ./nm-test.o
00000000 t plus_four
00000023 T product_plus_four
0000000b T sum_plus_four
Según the manual, 't' significa que el símbolo está en el segmento de código (texto), y medios mayúsculas es público.
Si tiene un símbolo que está buscando, puede usar nm
para hacer que los símbolos exportados por una biblioteca sean accesibles, p. Ej. grep:
$ find -name lib*.a /example/library/path | xargs nm | grep -E "T $SYMBOL_TO_FIND"
Esta línea de comandos es un boceto no probado, pero debe mostrar el concepto.
Si es parte de la API estándar C y ejecuta man
, debe indicar claramente dónde se define la función.
Y si no lo es, la documentación de la biblioteca presumiblemente indica cómo enlazarla. – nos
Si desea conocer la biblioteca de forma no programática, puede encontrar LSB Navigator útil. Ingrese la función en el cuadro de búsqueda y verifique la biblioteca en la línea con el "estado" verde.
http://coldattic.info/pic/165509391387.png
Esta será la biblioteca "convencional" que contiene la función (en el ejemplo representado anteriormente, librt
es la biblioteca correcta para mq_unlink
, por lo que se vincula con -lrt
). Simplemente enlace con esa biblioteca, y funcionará en prácticamente todos los sistemas Linux.
Nota: Yo era uno de los desarrolladores de la herramienta que recomiendo.
- 1. Tiempo de compilación del sistema operativo
- 2. Pregunta de arranque del sistema operativo básico
- 3. Sistema de compilación y portabilidad
- 4. Cómo prohibir las llamadas al sistema, GNU/Linux
- 5. gcc y g ++ símbolo del sistema compilación y vinculación
- 6. Pregunta rápida sobre la compilación condicional (ifndef)
- 7. Mejor sistema de compilación para desarrollo integrado/compilación cruzada
- 8. opciones de ruta de compilación de java eclipse pregunta
- 9. Sistema de compilación continua para Qt
- 10. GNU make: ¿invertir el éxito del subproceso?
- 11. compilación del programa java
- 12. Pregunta de diseño: ¿cómo diseñaría un sistema de eventos recurrentes?
- 13. GNU Makefile equivalente del comando shell 'TRAP' para la identificación concisa del error de compilación en la salida
- 14. Recopilación de números de versión del sistema operativo y la herramienta para el archivo de compilación
- 15. error de compilación CUDA de símbolo de sistema
- 16. AnyEvent pregunta del temporizador
- 17. Pregunta del modo Emacs
- 18. pregunta del operador Perl6
- 19. Java | = pregunta del operador
- 20. ¿Cuál es el mejor sistema de compilación de Scala?
- 21. Compilación cruzada para un sistema Linux basado en ARM incrustado
- 22. Sistema de documentación y compilación para Mono/C#
- 23. Complemento de código de sistema de compilación externo Xcode 4
- 24. /La directiva de compilación de Za no compila los encabezados del sistema en VS2010
- 25. Speedup GNU make build process - Paralelismo?
- 26. Sistema de compilación para un proyecto incrustado de C/C++
- 27. ¿Qué sistema de compilación automatizado usan los desarrolladores de Mac?
- 28. Sistema de compilación independiente para proyectos de Visual Studio
- 29. Aprender y entender el sistema de compilación de Xcode
- 30. Compilación de sistema de 64 bits para el sistema de 32 bits - la compatibilidad
¿No encuentra los nombres de las funciones dadas a la biblioteca, en lugar de la biblioteca dado el nombre de la función? –
@ Pete: Es cierto, pero como exporta la información, se puede usar para grep sobre los archivos de la biblioteca. – unwind
Gracias ... Lo tengo .. – Dinesh