如何用codeblocks+mingw-w64编译器编译glew库
codeblocks吧
全部回复
仅看楼主
level 2
秋雨芙蕖 楼主
纯新手向~~~~~~~~~~~~~~~~~~~~~~~~~
如何用codeblocks+mingw-w64编译器编译glew库(IDE:codeblocks使用)
一般我们编译一个程序需要一个IDE和一个编译器和一些库文件才能编译出可以运行的exe程序。
IDE:codeblocks-16.01
编译器:GNU/GCC-windowns版编译器mingw,这里选用mingw-w64版本,可以编译出64位程序。
系统:win7-64位sp1。
1、下载codeblocks16.01
官网:http:/[睡觉]/http://www.codeblocks.org/下载页面地址:http:/[睡觉]/http://www.codeblocks.org/downloads/26选第一个codeblocks-16.01-setup.exe,这个是纯IDE不带编译器。
下载地址:https:/[睡觉]/sourceforge.net/projects/codeblocks/files/Binaries/16.01/Windows/codeblocks-16.01-setup.exe/download
2、下载mingw-w64
文件:mingw-w64-install.exe
下载地址:https://sourceforge.net/projects/mingw-w64/
3、安装codeblocks,mingw-w64
codeblocks安装参数:我把他安装在d:盘。D:\Program Files (x86)\CodeBlocks
打开安装文件codeblocks-16.01-setup.exe,然后一路点NEXT,在安装路径选择你喜欢的地方,最后点finish结束。
mingw-w64安装参数:
版本version:5.3.0,一般选最新的。(截止2016年04月20号5.3.0是最新的版本)
架构Achitecture:x86_64,win系统都是此架构,选这个x86_64可以编译64位程序,i686只能编译32位。
线程Threads:选posix,posix跨平台。
异常处理Exception:seh。调试用。
build version:0.
安装位置:我的安装位置:D:\MinGW\mingw64
我的安装位置:
点NEXT,等待安装结束。
2016年04月21日 13点04分 1
level 2
秋雨芙蕖 楼主
二、在IDE:codeblocks中配置mingw-w64编译器,使之能编译最简单的c程序在cmd窗口即控制台打印出“你好!”
1、打开codeblocks,设置编译器位置。(告诉IDE编译器在哪里)。
settings-弹出菜单第三行compiler setting(编译器设置)。
点蓝色框选择mingw-w64安装位置里的mingw文件夹,编译器位置就设置好了。
可以编译最简单的程序了。
文件夹里有各种编译器。
我的设置是
主要是要交叉编译程序。我在64位系统可以编译出32位系统能运行的程序。
扩展:在cmd里使用mingw32-make编译程序:
先添加mingw-w64安装文件的bin地址到系统path环境变量里。
复制mingw-w64bin文件夹到path里。
计算机-属性-高级系统设置-环境变量-path,注意添加英文标号“;”。
2016年04月21日 13点04分 2
level 2
秋雨芙蕖 楼主
三、最简单的程序。
1、file-new-project-empty project(空项目)
参数如下:
我项目的位置放在D:\CodeBlocks工程下。
点finish完成。
什么都没有,别急,先去看看工程文件夹发生了什么。
建立工程之前,什么都没有:
建立之后,且工程未添加文(里面只有项目文件.c
bp
,没有源代码文件):
2、为项目添加源代码文件。
files-new-files
2016年04月21日 13点04分 3
level 2
秋雨芙蕖 楼主
在工程文件夹里的bin/debug文件夹里的你好.exe,就是我们编译好的exe程序,可以移到其他电脑运行。
2016年04月21日 13点04分 5
level 2
秋雨芙蕖 楼主
四。编译glew库(动态链接库dll)
1、下载glew源码包。
官网地址:http://glew.sourceforge.net/
github:https://github.com/nigels-com/glew
我下载的是非稳定版:
glew-20160402.tgz GLEW 2.0.0 release candidate, Core context, EGL support, no MX
将下载的压缩文件解压,得到如下文件:
我们感兴趣的是include里的4个头文件和src源码文件夹里的glew.c源码文件。
新建glew32dll工程文件,注意这里的项目文件名,这关系到最后dll文件名,编译成dll文件后,dll文件名不可以更改。
files-new-project-dll
点击glew32dll项目,右键,remove files
移除文件后,到glew32dll工程文件夹,删除main.f95文件,把上面glew提到的4个头文件(即GL文件夹),一个glew.c文件复制到glew32dll工程文件夹里。
gl文件夹里包含4个头文件eglew.h,glew.h,glxew.h,wglew.h
在codeblocks中点击glew32dll项目,右键,add files,添加glew.c共1个文件。
2016年04月21日 14点04分 6
level 2
秋雨芙蕖 楼主
全部勾上。
好了,接下来把工程项目添加到setting-compile-search dir...目录里。关键是头文件.h所在的目录。
因为glew.c的包含是这么写#include <GL/glew.h>
所以search目录只能到glew32dll文件夹。
接下来需为glew.c指定链接libopengl32.a库文件,否则会出错。
在mingw-w64安装文件夹里搜索库文件,复制到你喜欢的位置,我放在GL文件夹里,与头文件在一起。
严格来说这样并不利于文件管理,这方面将在codeblocks+glew+glfw学习opengl里说明。
好了,现在包含,search文件夹设置好了,库目录也链接指定好了,可以开始build了。
2016年04月21日 14点04分 7
使用codeblocks+mingw-w64+glew+glfw配置opengl环境学习opengl编程 http:/[睡觉]/tieba.baidu.com/p/4496970123
2016年04月22日 13点04分
level 2
秋雨芙蕖 楼主
项目里的bin/debug文件夹里这2个文件glew32dll.dll,libglew32dll.a就是我们要的了。
如何使用库,将会在下节说明。
五、可能会出现的问题。
1、包含'\244'字符
答:在setting-editor-设置成utf-8即可。
2、未定义函数
答:把libopengl32.a链接上即可
问题表现:
obj\Debug\glew.o||In function `_glewInit_GL_VERSION_1_2':|
D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|7397|undefined reference to `__imp_wglGetProcAddress'|
D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|7398|undefined reference to `__imp_wglGetProcAddress'|
D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|7399|undefined reference to `__imp_wglGetProcAddress'|
D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|7400|undefined reference to `__imp_wglGetProcAddress'|
obj\Debug\glew.o||In function `_glewInit_GL_VERSION_1_3':|
D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|7413|undefined reference to `__imp_wglGetProcAddress'|
obj\Debug\glew.o:D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|7414|more undefined references to `__imp_wglGetProcAddress' follow|
obj\Debug\glew.o||In function `wglewGetExtension':|
D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|16169|undefined reference to `__imp_wglGetCurrentDC'|
obj\Debug\glew.o||In function `wglewInit':|
D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|16182|undefined reference to `__imp_wglGetProcAddress'|
D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|16183|undefined reference to `__imp_wglGetProcAddress'|
D:\CodeBlocks工程\OpenGL-学习\glew32dll\glew.c|16191|undefined reference to `__imp_wglGetCurrentDC'|
obj\Debug\glew.o:glew.c:(.rdata$.refptr.glGetIntegerv[.refptr.glGetIntegerv]+0x0)||undefined reference to `glGetIntegerv'|
obj\Debug\glew.o:glew.c:(.rdata$.refptr.glGetString[.refptr.glGetString]+0x0)||undefined reference to `glGetString'|
3、重定义
答:删除重复
4、未设置头文件目录
答:把目录加到search dir...设置里
问题表现:
||=== Build: Debug in glew32dll (compiler: GNU GCC Compiler) ===|
D:\CodeBlocks工程\glew32dll\glew.c|33|fatal error: GL/glew.h: No such file or directory|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
5、蓝屏
答:多 save project几次,避免重启之后,右要在设置一番。
2016年04月21日 14点04分 8
level 2
秋雨芙蕖 楼主
六、上面编译编译完,阅读代码发现,
前面需加定义
#define GLEW_BUILD 是dll动态库设置
#define GLEW_STATIC 是静态库设置
所以glew.c前面加 #define GLEW_BUILD,在编译
但会遇到重定义,把重定义部分注释掉即可。
||=== Build: Debug in glew32dll (compiler: GNU GCC Compiler) ===|
obj\Debug\glew.o||In function `DllMainCRTStartup':|
D:\CodeBlocks工程\glew32dll\glew.c|17513|multiple definition of `DllMainCRTStartup'|
D:\MinGW\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\5.3.0\..\..\..\..\x86_64-w64-mingw32\lib\..\lib\dllcrt2.o:crtdll.c|| first defined here|
||error: ld returned 1 exit status|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
重定义部分注释掉,编译就正常了。
这样编译出来的文件大小没变化,但编译速度是前面的n倍,且库也能正常使用。
前面未加#define GLEW_BUILD,编译花了我15分钟和3千多个警告,且蓝屏一次。
加了之后,一秒就编译完了,一切正常。
楼主纯新手,正在学习opengl,编译的库楼主也不知道后面是否会出错。
现在这个库,可以渲染三角形。
2016年04月21日 14点04分 9
1