c++ namespaces linker-errors extern

C++: Funciones externas C dentro de un espacio de nombres



namespaces linker-errors (1)

Tengo que vincular dos bibliotecas, digamos A y B. Algunos de los archivos son comunes en ambas bibliotecas. Por lo tanto, declaro funciones en la biblioteca A dentro de un espacio de nombres, digamos abc. Entonces, en A y B, una función de función se ve a continuación:

[ in A] namespace abc { extern "C" void func(); } [in B] extern "C" void func();

Al compilar el proyecto, el compilador arroja errores de enlace que dicen múltiples definiciones de la función func. ¿No está la función func en A dentro del espacio de nombres o hay algún problema con las funciones externas "C"? Si los hay, ¿cómo puedo diferenciarlos a ambos?


Cuando usa Extern "C", está desactivando la manipulación de nombres para que pierda la información del espacio de nombres ya que C no tiene ese concepto. Esto provoca una definición duplicada.