`DllMainCRTStartup@12' 的多重定义,同时使用 mingw32 在 Windows 上构建 glew
Posted
技术标签:
【中文标题】`DllMainCRTStartup@12\' 的多重定义,同时使用 mingw32 在 Windows 上构建 glew【英文标题】:multiple definition of `DllMainCRTStartup@12' while building glew on windows with mingw32`DllMainCRTStartup@12' 的多重定义,同时使用 mingw32 在 Windows 上构建 glew 【发布时间】:2016-12-05 00:31:11 【问题描述】:我关注了这个话题:Building glew on windows with mingw,但这里出了点问题:
gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll src/glew.o -L/mingw/lib - lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
我收到此错误:
C:\MinGW\dev_lib\glew-2.0.0>gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-imlib,lib/libglew32.dll.a -o lib/glew32. dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32 src/glew.o:glew.c:(.text+0x28f80): `DllMainCRTStartup@12' 的多重定义 c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../dllcrt2.o:(.text+0x60): 这里首先定义 collect2.exe:错误:ld 返回 1 个退出状态
感谢您的帮助。
【问题讨论】:
【参考方案1】:您需要像这样链接-nostdlib
选项:
gcc -nostdlib -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
Glew 定义了 DllMainCRTStartup,它也在 CRT 中定义。因此你的问题。
【讨论】:
如果这是真的,毫无疑问它给出了链接器错误,这非常令人讨厌。 -nostdlib 当然不是一个有效的解决方法,对于在 DLL 中正确初始化 CRT 非常重要。正确的建议肯定是只在 EXE 项目中使用 Glew。这就是它的目的,一种开始使用 OpenGL 的简单方法。以上是关于`DllMainCRTStartup@12' 的多重定义,同时使用 mingw32 在 Windows 上构建 glew的主要内容,如果未能解决你的问题,请参考以下文章
Delphi的基于接口(IInterface)的多播监听器模式(观察者模式 ),利用RTTI实现Delphi的多播事件代理研究