Ahora tengo un problema bastante confuso para mí: Tengo un programa escrito en C++ y enlaces contra una biblioteca en C. Incluyo las clases de encabezado usando el habitualLa optimización de GCC da como resultado un "símbolo indefinido" en el tiempo de ejecución
extern "C" {
#include <libheader.h>
}
Todo funciona bien siempre que no utilice la optimización de gcc. Una vez que enciendo even -O1, así el primer nivel de optimización, durante el tiempo de ejecución obtengo un error de "símbolo indefinido" para un símbolo de esta biblioteca. Sin embargo, el nombre ha pasado por el cambio de nombre que debe deshabilitarse debido a extern "C"
.
La función que llama al símbolo en cuestión está en línea, en caso de que esto importe. El compilador utilizado es gcc 4.4.3.
Honestamente, ni siquiera tengo una idea de qué buscar, así que estaría muy agradecido si alguno de ustedes pudiera darme alguna razón para este comportamiento.
Gracias por su apoyo.
¿Se puede eliminar la línea (es decir, hacer que la función no esté en línea) y ver si comienza a funcionar? – sashoalm
Como alternativa a la sugerencia de @ satuon, ¿podría hacer que la función en línea llame a una función C++ que envuelva la función C y vea si eso la hace empezar a funcionar? –
Gracias por su respuesta! Probé ambas sugerencias, sin embargo, el símbolo aún no se encuentra. – Thilo