小知识:在MinGW中应用GLUT和opengl, gcc 的option .dll 和 .lib

2012-04-25 02:31:42 +08:00
 Hualin
今天编译一个C写的opengl程序,开始居然没有运行起来,设置如下:

> environment
安装了Nvidia opengl SDK
安装了minGW在默认目录
下载了glut的库函数包

将glut的函数解压缩在要调试的程序的目录下

> test.c
#include "windows.h"
#include "GL\GLUT"

> cmd
gcc test.c -o test -mwindows -lglut32 -lglu32 -lopengl32 -std=c99

居然link过不去,说找不到glut32.我这也是参考网上的文档,所以也不知道到底是怎么回事。后来改成:
gcc test.c -o test -mwindows glut32.lib -lglu32 -lopengl32 -std=c99
就通过了。

好奇怪,为什么glut32.dll不能用呢?那为什么可以连接glu32.dll 和 opengl32.dll

后来命令改成:
gcc test.c -o test -mwindows -L. -glut32 -lglu32 -lopengl32 -std=c99

然后居然通过了。
然后删除了本地目录的glut32.lib,再运行该命令,也通过,但是出来了几个警告。


后来知道 .lib是静态的 .dll是动态的,但glut的liblink到源文件中,并不能生成可执行的文件,事实上,
链接glut32.lib 和glut32.dll生成的可执行文件大小都一样。所以这个lib只是帮编译器找到dll而已,只是个table,也没实际内容。后原来把各个目录下的glut32.dll删除再运行
gcc test.c -o test -mwindows glut32.lib -lglu32 -lopengl32 -std=c99
只是通过了,但是无法执行。

所以总结,glut32.dll是必需的,而glut32.lib不是。网上很多文档并不是很详细,也没告诉为什么会发生这种情况。

OK
2784 次点击
所在节点    Python
1 条回复
Hualin
2012-04-25 02:37:25 +08:00
呃,是
gcc test.c -o test -mwindows -L. -lglut32 -lglu32 -lopengl32 -std=c99

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/33450

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX