Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





security_cookie en MinGW

Iniciado por StarAD, 17 de Agosto de 2007, 06:13:12 PM

« anterior - próximo »

StarAD

Hola:

Acudo a vosotros como mi última esperanza. Llevo tiempo trabajando con Ogre3d y hace unas semanas me pase del sdk precompilado al codigo fuente y compilarlo yo mismo. Compile la libreria principal, pero cuando intente compilar la libreria que conecta con DirectX me salieron unos errores en el proceso de link. Utilizo Eclipse con Mingw y DirectX SDK la version de agosto del 2007 ( aunque he provado con otras versiones ). Este es el comando y el error:


**** Build of configuration Release for project RenderSystem_Direct3D9 ****

mingw32-make -k all
Building target: RenderSystem_Direct3D9.dll
Invoking: GCC C++ Linker
g++ -L../../../OgreMain/Release -L"E:\DirectXSDK\Lib\x86" -Wl,--enable-runtime-pseudo-reloc -shared -o"RenderSystem_Direct3D9.dll"  ./src/OgreD3D9Driver.o ./src/OgreD3D9DriverList.o ./src/OgreD3D9EngineDll.o ./src/OgreD3D9GpuProgram.o ./src/OgreD3D9GpuProgramManager.o ./src/OgreD3D9HLSLProgram.o ./src/OgreD3D9HLSLProgramFactory.o ./src/OgreD3D9HardwareBufferManager.o ./src/OgreD3D9HardwareIndexBuffer.o ./src/OgreD3D9HardwareOcclusionQuery.o ./src/OgreD3D9HardwarePixelBuffer.o ./src/OgreD3D9HardwareVertexBuffer.o ./src/OgreD3D9Mappings.o ./src/OgreD3D9MultiRenderTarget.o ./src/OgreD3D9Plugin.o ./src/OgreD3D9RenderSystem.o ./src/OgreD3D9RenderWindow.o ./src/OgreD3D9Texture.o ./src/OgreD3D9TextureManager.o ./src/OgreD3D9VertexDeclaration.o ./src/OgreD3D9VideoMode.o ./src/OgreD3D9VideoModeList.o   -lOgreMain -lgdi32 -ld3d9 -ld3dx9 -lDxErr9 -ldxguid
Info: resolving vtable for Ogre::Exceptionby linking to __imp___ZTVN4Ogre9ExceptionE (auto-import)
Info: resolving Ogre::StringInterface::msDictionary       by linking to __imp___ZN4Ogre15StringInterface12msDictionaryE (auto-import)
Info: resolving vtable for Ogre::GpuProgramby linking to __imp___ZTVN4Ogre10GpuProgramE (auto-import)
Info: resolving vtable for Ogre::MultiRenderTargetby linking to __imp___ZTVN4Ogre17MultiRenderTargetE (auto-import)
Info: resolving Ogre::Frustum::INFINITE_FAR_PLANE_ADJUST      by linking to __imp___ZN4Ogre7Frustum25INFINITE_FAR_PLANE_ADJUSTE (auto-import)
Info: resolving Ogre::Matrix4::ZERO     by linking to __imp___ZN4Ogre7Matrix44ZEROE (auto-import)
Info: resolving Ogre::Matrix4::CLIPSPACE2DTOIMAGESPACE      by linking to __imp___ZN4Ogre7Matrix423CLIPSPACE2DTOIMAGESPACEE (auto-import)
Info: resolving Ogre::Matrix4::IDENTITY     by linking to __imp___ZN4Ogre7Matrix48IDENTITYE (auto-import)
Info: resolving Ogre::StringUtil::BLANK      by linking to __imp___ZN4Ogre10StringUtil5BLANKE (auto-import)
Info: resolving vtable for Ogre::RenderWindowby linking to __imp___ZTVN4Ogre12RenderWindowE (auto-import)
Info: resolving vtable for Ogre::Textureby linking to __imp___ZTVN4Ogre7TextureE (auto-import)
Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" ' unrecognized
Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" ' unrecognized
E:\DirectXSDK\Lib\x86/DxErr9.lib(obj/i386/dxerr9.obj): In function `DXTraceW@20':
e:\dxsdk\wggt_aug0:32766: undefined reference to `_chkstk'
e:\dxsdk\wggt_aug0:(.text[_DXTraceW@20]+0x10): undefined reference to `__security_cookie'
e:\dxsdk\wggt_aug0:46: undefined reference to `@__security_check_cookie@4'
E:\DirectXSDK\Lib\x86/DxErr9.lib(obj/i386/dxerr9.obj): In function `DXTraceA@20':
e:\dxsdk\wggt_aug0:32766: undefined reference to `_chkstk'
e:\dxsdk\wggt_aug0:(.text[_DXTraceA@20]+0x10): undefined reference to `__security_cookie'
e:\dxsdk\wggt_aug0:46: undefined reference to `@__security_check_cookie@4'
collect2: ld returned 1 exit status
mingw32-make: *** [RenderSystem_Direct3D9.dll] Error 1
mingw32-make: Target `all' not remade because of errors.
Build complete for project RenderSystem_Direct3D9


Tras investigar encontre que _security_cookie es un mecanismo que se añadió en las ultimas versiones de VisualC++ para checkear que no se sobrepasaba el tamaño de la pila al ejecutar una función. Al llamar una función, salvar los registros, guardar la direccion de rotorno y todas esas mandangas se añadia un DWORD con un valor que al salir de la función se  testeaba para ver si se habia salido del tamaño reservado para la funcion en la pila. En MVC se podia deshabilitar esta opción añadiendo la opcion /GS- a la hora de compilar. Pero mi pregunta es como lo deshabilito en MingW? Porque las librerias de DirectX utilizan este mecanismo por defecto? Se supone que todo el mundo va escoger VisualC  para desarrollar sus proyectos?

Si alguien sabe alguna manera de solucionar este problema, alguna libreria que implemente esta funcionalidad para MingW o como llevar a la quiebra a microsoft seria de gran ayuda.

Gracias.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.