referencia indefinida a errores al vincular una biblioteca C estática con código C
Al intentar vincular una biblioteca C estática con código C, puede encuentra errores de "referencia indefinida a", a pesar de modificar el orden de los enlaces. Este problema surge de los diferentes nombres de símbolos creados por la compilación de C y C, lo que se conoce como 'mangling de nombres'.
En C, el vinculador muestra nombres de símbolos solicitados en mensajes de error, lo que puede resultar confuso. La inspección del archivo objeto (*.o) con "nm -u" revela que los nombres de los símbolos a los que se hace referencia no coinciden con los de la biblioteca.
Para resolver este problema, las funciones vinculadas como externas que se compilaron utilizando el El compilador de C debe tener sus declaraciones de funciones encerradas en un bloque "externo "C" {}". Esto suprime la alteración del nombre C para todo lo que está dentro del bloque.
Por ejemplo:
extern "C" {
#include
#include
}
Como alternativa, puede empaquetar declaraciones de funciones en archivos de encabezado de la siguiente manera:
#if defined (__cplusplus)
extern "C" {
#endif
/*
* Put plain C function declarations here ...
*/
#if defined (__cplusplus)
}
#endif
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3