V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Hualin
V2EX  ›  Python

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

  •  
  •   Hualin · 2012-04-25 02:31:42 +08:00 · 2806 次点击
    这是一个创建于 4620 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天编译一个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
    1 条回复    1970-01-01 08:00:00 +08:00
    Hualin
        1
    Hualin  
    OP
       2012-04-25 02:37:25 +08:00
    呃,是
    gcc test.c -o test -mwindows -L. -lglut32 -lglu32 -lopengl32 -std=c99
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5420 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:21 · PVG 15:21 · LAX 23:21 · JFK 02:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.