extern "C", es una palabra clave para declarar una función con fijaciones C, porque el compilador de C y C++ Compiler se traducirán de origen en forma diferente en el archivo de objeto:
Por ejemplo, un fragmento de código es el siguiente:
int _cdecl func1(void) {return 0}
int _stdcall func2(int) {return 0}
int _fastcall func3(void) {return 1}
compiladores de 32 bits C traducirán el código en la forma como sigue:
_func1
[email protected]
@[email protected]
en el cdecl, func1 se traducirá como '_name '
en el stdcall, func2 se traducirá como' _name @ X '
en el fastcall, func2 se traducirá como' @ nombre @ X '
' X 'significa la cantidad de bytes de los parámetros en la lista de parámetros.
convención de 64 bits en Windows no tiene ningún subrayado inicial
En C++, se introdujo clases, plantillas, espacios de nombres y la sobrecarga de operadores, ya que no se permite dos funciones con el mismo nombre, compilador de C++ proporcionar la información de tipo en el nombre del símbolo,
por ejemplo, un fragmento de código es el siguiente:
int func(void) {return 1;}
int func(int) {return 0;}
int func_call(void) {int m=func(), n=func(0);}
compilador de C++ traducir el código de la siguiente manera:
int func_v(void) {return 1;}
int func_i(int) {return 0;}
int func_call(void) {int m=_func_v(), n=_func_i(0);}
'_v' y '' son _i información de tipo de 'vacío' y 'int'
También esas funciones usan la convención de llamadas C, si difiere de la convención de llamadas C++. Lo cual probablemente no sea así, para las funciones de C++ que toman solo los tipos de C como parámetros, pero con 'extern' C '' definitivamente no. –
¿Qué llamada usaste para obtener los nombres de los símbolos allí? – meawoppl
@meawoppl ['nm'] (http://linux.die.net/man/1/nm). –