芙蕖吧 关注:497贴子:2,677
  • 12回复贴,共1

如何用codeblocks+mingw-w64编译glew库(IDE:codeblocks使用)

只看楼主收藏回复

如何用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,等待安装结束。


IP属地:北京1楼2016-04-20 19:47回复
    二、在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,注意添加英文标号“;”。


    IP属地:北京2楼2016-04-20 20:15
    回复
      三、最简单的程序。
      1、file-new-project-empty project(空项目)


      参数如下:
      我项目的位置放在D:\CodeBlocks工程下。


      点finish完成。

      什么都没有,别急,先去看看工程文件夹发生了什么。
      建立工程之前,什么都没有:

      建立之后,且工程未添加文(里面只有项目文件cpb,没有源代码文件):


      2、为项目添加源代码文件。
      files-new-files



      IP属地:北京3楼2016-04-20 20:42
      收起回复


        在工程文件夹里的bin/debug文件夹里的你好.exe,就是我们编译好的exe程序,可以移到其他电脑运行。


        IP属地:北京6楼2016-04-20 21:02
        回复
          四。编译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个文件。



          IP属地:北京8楼2016-04-20 21:55
          回复
            全部勾上。


            好了,接下来把工程项目添加到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了。


            IP属地:北京9楼2016-04-20 22:19
            回复
              项目里的bin/debug文件夹里这2个文件glew32dll.dll,libglew32dll.a就是我们要的了。
              如何使用库,将会在下节说明。

              五、可能会出现的问题。
              1、包含'\244'字符
              答:在setting-edit-设置成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几次,避免重启之后,在设置一番。


              IP属地:北京10楼2016-04-20 22:48
              回复
                六、上面部分是全部编译,阅读代码发现,
                dll 前面需加定义
                #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)) ===|

                这样编译出来的文件大小没变化,
                所以这样的设置是没有必要的。


                IP属地:北京11楼2016-04-20 23:01
                收起回复
                  谢谢楼主分享学习经验,受教了


                  IP属地:湖北12楼2017-10-29 22:02
                  回复
                    厉害支持楼主


                    白银星玩家
                    百度星玩家累积成长值为1,去领取
                    活动截止:2100-01-01
                    去徽章馆》
                    IP属地:河北13楼2020-05-04 08:32
                    回复