Antes de hoy siempre creí que el orden en que los objetos y las bibliotecas pasaban a g ++ durante la etapa de vinculación no era importante. Entonces, hoy, traté de vincular desde código C++ a código c. Envolví todos los encabezados C en un bloque "C" externo pero el enlazador aún tenía dificultades para encontrar símbolos que yo sabía que estaban en los archivos del objeto C.g ++ vinculando la dependencia de orden al vincular el código c con el código C++
Perplejo, creé un ejemplo relativamente simple para aislar el error de enlace, pero para mi sorpresa, el ejemplo más simple se vinculó sin ningún problema.
Después de un poco de prueba y error, encontré que al emular el patrón de vinculación utilizado en el ejemplo simple, pude obtener el código principal para vincular OK. El patrón fue código objeto primero, segundo objeto archivos por ejemplo:
g++ -o serverCpp serverCpp.o algoC.o libcrypto.a
¿Alguien puede arrojar algo de luz sobre por qué esto podría ser tan ?. Nunca he visto este problema al vincular el código ordinario de C++.
Para más detalles, consulte: http://stackoverflow.com/questions/1095298/gcc-c-linker-errors-undefined-reference -to-vtable-for-xxx-undefined-referen/1095321 # 1095321 –