2012-06-29 15 views
5

Sé que ya se me ha preguntado algo similar, pero no he podido solucionar este problema durante horas.Mingw multiple definition of _Unwind_resume

Básicamente tengo un archivo DLL con el código y una aplicación que lo llama. Todo funciona bien, pero si tomo los dos fuera de mi entorno de desarrollo, dice que el programa no puede iniciarse porque libgcc_s_dw2 1.dll falta en la computadora.

Esto es justo teniendo en cuenta que no es una computadora de desarrollo. Entonces para la distribución agregué las banderas del compilador "-static-libgcc -static-libstdc++". Hice esto para el dll y para la aplicación.

Pero cuando compilo la aplicación me sale el error:

"multiple definition of `_Unwind_Resume'"

pensé que esto era debido tanto a la DLL y la aplicación que tenga las bibliotecas estáticas en ellos, y lo es. Pero si ninguno de los dos tiene las bibliotecas estáticas integradas, el programa no se ejecutará en las máquinas del usuario final.

¿Cómo puedo eliminar este error sin tener aún dependencias en las mingw libs? Mi IDE es Code :: Blocks.

David

EDIT: aquí es el registro de generación en la construcción de la aplicación que se vincula a la DLL:

c:/mingw/bin/../lib/gcc/mingw32/4.6.2/libgcc_eh.a(unwind-dw2.o):(.text+0x298c): multiple definition of `_Unwind_Resume' 

..\EquilibriumEngine\bin\Release\libEquilibriumEngine.dll.a(d000015.o):(.text+0x0): first defined here 

collect2: ld returned 1 exit status 

Process terminated with status 1 (0 minutes, 0 seconds) 

2 errors, 0 warnings 
+0

¿Se puede añadir cualquier registro Código :: Blocks tiene para la construcción (algo que incluye los comandos que se utilizan para compilar/enlace a lo largo de con las advertencias y errores resultantes)? –

+2

Quizás esta respuesta http://stackoverflow.com/questions/8765215/multiple-definitions-of-unwind-resume le brinde algunos indicios de lo que está mal. – Arnestig

Respuesta

1

Por favor, repita con la bandera enlazador -static solamente. Pero (si es posible) incluya el libgcc_s_dw2 1.dll en su exe y distribuya ambos. Puede obtener el dll desde la carpeta MinGW/bin.

También haga que no haya agregado -static-libgcc al compilador, pero enlazador -flags!

0

Una solución hacky que trabaja a menudo es agregar esto a sus banderas enlazador:

-Wl,-allow-multiple-definition