2009-11-09 15 views

Respuesta

0

Consulte el manual de GCC con respecto a -fleading-underscore. Sin embargo, lea las advertencias sobre las consecuencias de esta acción; puede que no sea la solución que crees que es.

+0

Gracias por la respuesta, aunque parece que no funciona, por lo que el estándar en C no es usar el subrayado inicial? Intenté hacer que fuera algo portátil entre los compiladores, las funciones son exportaciones de un archivo DLL que deben cargarse. –

+0

¿Está compilando el código como C o C++? Para la interoperabilidad del compilador, la DLL solo debe presentar las interfaces C. Puede usar C++, pero las interfaces deben declararse extern "C" (y, por supuesto, solo usar tipos compatables C, y no sobrecargar la función). – Clifford

0

La mejor apuesta al tratar con el cambio de nombre de función en Windows es usar siempre un archivo .def. Esto funcionará igual independientemente del compilador. Normalmente sólo se necesita la sección EXPORTS:

EXPORTS 
    Func1 
    Func2 
    ... 
4

Ver this answer.

int Func() __asm__("[email protected]"); 

Esto obligará a GCC para nombrar el símbolo [email protected] independientemente de lo que habría hecho normalmente.


Ah, claro, @ es especial: se utiliza para el símbolo de control de versiones. Pensé que __asm__("[email protected]") solía funcionar, pero creo que ya no funciona.

int Func() __asm__("_Func"); 
__asm__(".symver _Func, [email protected]"); 

Esto debe ir acompañado de un archivo version script, como:

1 { 
    global: 
    _Func; 
}; 

dado a gcc -Wl,--version-script=foo.version al vincular.

+0

Gracias, pero o bien estoy haciendo algo mal o no funciona, no me deja vincularlo. http://pastebin.com/f14a9a00f –

Cuestiones relacionadas