Tengo que vincular dos bibliotecas, por ejemplo, A y B. Algunos de los archivos son comunes en ambas bibliotecas. Entonces, declaro funciones en la biblioteca A dentro de un espacio de nombres, diga abc. Así, en A y B, una función func se parece a continuación:C++: Funciones de Extern C dentro de un Namespace
[ in A]
namespace abc {
extern "C" void func();
}
[in B]
extern "C" void func();
Mientras que la construcción del proyecto, el compilador genera errores que unen diciendo 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 lo hay, ¿cómo puedo diferenciarlos a los dos?
Tenga en cuenta, sin embargo, que el mangle del nombre no se puede desactivar para el preprocesador C. En Visual C++ 2010, el valor de la macro '__FUNCTION__' sigue siendo el identificador totalmente calificado incluso bajo 'extern' C" ', p. "tu nombre". Esto caerá en tus pies cuando llames a macros en espacios de nombres que usan macros predefinidas como '__FUNCTION__',' __PRETTY_FUNCTION__' o '__func__'. En mi caso (exportando stubs C desde una DLL) lo hizo ;-) –