编译freeglut-3.0.0的Windows版静态库,及其使用示例

freeglut-3.0.0这个库咱就不介绍了,开门见山。

1、下载源码

可以去咱的资源下载:http://download.csdn.net/detail/sugar13/8534037

也可以去官网下载:http://sourceforge.net/projects/freeglut/

2、建立工程(以VC6为例)

新建工程,工程类型为Win32 Static Library,工程起名叫freeglut_static,然后解压源码包,将得到的“freeglut-3.0.0”文件夹放到工程目录下(注意如果解压后的文件夹重复了两层“freeglut-3.0.0”,请手动去掉一层)。

打开“freeglut-3.0.0includeGL”文件夹,发现里面有4个.h文件,将其中以字母f打头的3个文件添加到工程中。

打开“freeglut-3.0.0src”文件夹,发现里面有mswin、util之类的子文件夹,也有“fg_callbacks.c”、“fg_init.h”等等的源文件。将这里的24个以字母f打头的.c文件和5个.h文件全部添加到工程中(注意“gles_stubs.c”文件不要添加)。

打开“freeglut-3.0.0srcmswin”文件夹,将其中的13个.c文件和1个.h文件全部添加到工程中。

打开“freeglut-3.0.0srcutil”文件夹,里面只有两个源文件,都添加到工程中。

3、配置工程

工程目录下新建一个名叫“config.h”的文件,添加到工程中。打开该文件,向其中添加如下代码:

#include "utilxparsegeometry_repl.h"

请打开工程属性对话框,同时选中Debug版本和Release版本的工程属性(也就是选择All configurations),在C/C++选项卡下,选择Preprocessor列表:

添加几组预处理,FREEGLUT_STATIC,HAVE_CONFIG_H,WINVER=0x0500,_WIN32_WINNT=0x0500,注意多个预处理之间,使用英文逗号进行分隔;第1个表示咱要编译的是静态版本的库,第2个表示咱使用了“config.h”文件,后两个表示咱要求的Windows版本至少为5.0(XP的Windows版本是5.1,Win7的Windows版本是6.1,大概……)。

添加几个头文件路径,“.”,“.freeglut-3.0.0include”,注意“.”路径表示工程所在文件夹,多个路径之间,使用英文逗号进行分隔

4、编译工程

打开工程属性对话框,在Library选项卡下,修改输出文件的名字,Debug版本的输出名字改为“freeglut_staticd.lib”,Release版本的输出名字改为“freeglut_static.lib”,就可以批量编译工程的Debug版本和Release版本了。不管哪个版本,都是0个Error和1个Warning,这个Warning是:warning C4018: '<' : signed/unsigned mismatch,目测不是什么严重的Warning。

找到freeglut-3.0.0includeGL”文件夹下的以字母f打头的3个文件,复制出来;找到生成的freeglut_staticd.lib”和freeglut_static.lib”这两个文件,复制出来;将这5个文件打个包,就是咱最终生成的静态库。

5、测试静态库

新建一个工程,工程类型为Win32 Console Application,工程起名叫freeglut_test。将最终生成的静态库,包括的5个文件全部放置在工程目录下,然后新建源文件“freeglut_test.c”并添加到工程中,测试代码如下:

#define FREEGLUT_STATIC
#include "freeglut.h"

#ifdef NDEBUG
#pragma comment(linker,"/entry:mainCRTStartup /subsystem:Windows ")
#endif

void display( void )
{
    glutWireTeapot (0.5);
    glutSwapBuffers ();
    return;
}

int main( int argc, char *argv[] )
{
    glutInit (&argc, argv);
    glutInitDisplayMode (GLUT_DOUBLE);
    glutInitWindowSize (256, 256);
    glutCreateWindow ("freeglut test");
    glutDisplayFunc (display);
    glutMainLoop();
    
    return 0;
}
运行效果很好。
PS:

使用静态库的优点,就是生成的.exe文件不必附带.dll文件即可拷到别的电脑上运行,缺点自然是生成的文件尺寸比较大,不过也大不到哪去,Release版本的静态库尺寸也就0.6MB左右。如果您喜欢使用动态库,用类似的方法也可以建立,注意在库工程和测试工程中,去掉FREEGLUT_STATIC这个宏定义就行了。

原文地址:https://www.cnblogs.com/sugar13/p/10216604.html