`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的主要内容,如果未能解决你的问题,请参考以下文章

OracleRAC的多实例数据迁移至单机的多实例。

UITableViewCell 使用系统的多选

RecycleView 的多条目

Delphi的基于接口(IInterface)的多播监听器模式(观察者模式 ),利用RTTI实现Delphi的多播事件代理研究

「回顾」自然语言处理中的多任务学习

Java的多线程实现生产/消费模式