"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo resolver errores de \"Referencia indefinida a\" al vincular bibliotecas C estáticas con código C++?

¿Cómo resolver errores de \"Referencia indefinida a\" al vincular bibliotecas C estáticas con código C++?

Publicado el 2024-11-08
Navegar:944

How to Resolve \

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
Declaración de liberación Este artículo se reimprime en: 1729663094 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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