如何在 Windows 中为 opengl 编译 gcc?

Posted

技术标签:

【中文标题】如何在 Windows 中为 opengl 编译 gcc?【英文标题】:How to gcc compiling for opengl in windows? 【发布时间】:2018-03-28 07:48:58 【问题描述】:

我想制作 .so 文件,所以在 windows 中使用 opengl(glut) 制作项目。

在 opengl 中使用“lib、dll 和 .h”

glut.lib, glut32.lib | glut.dll, glut32.dll | glut.h

但附加的 gcc 问题“未定义对 'funcion' 的引用”。

我用 .so(共享对象)文件制作 .o(对象)文件

Command : gcc -c -fPIC main.c -o main.o path 

所以我使用命令来创建文件。

Command : gcc -shared -o main.so -fPIC main.c

但我无法制作 .so 文件

-> 错误代码未定义对 'funcion' 的引用

Error : __impg_glClear, __imp_glBegin ... etc

如何制作.so文件并链接到.lib和.dll?

Environment : Windows 10, OpenGL(glut), VS2015, added the library dependencies(glut32.lib, glu32.lib, opengl32.lib)

【问题讨论】:

【参考方案1】:

首先,在 Linux 和 Unix 世界中,所谓的“共享对象” (.so) 是“动态链接库” (.dll ) 在 Windows 中。文件扩展名实际上并不重要——Windows 会加载任何具有有效 PE 头的文件就可以了——但为了方便起见,我们将其称为 DLL。

所以我使用命令来创建文件。

Command : gcc -shared -o main.dll -fPIC main.c

但我无法制作 .dll 文件

也就是说,因为您的链接命令确实缺少一些重要的东西:指定要链接到的外部库。尽管您添加了库依赖项,但我不知道您在项目或 Makefile 中的哪个位置,但它们肯定不会出现在链接命令中。要使用 GCC 链接库,必须为每个库提供 -l… 参数。

方式还有一些其他的问题,调用这个命令。当然你想链接.o文件在前面的编译命令中创建的方式。而且由于您已经创建了代码,所以-fPIC 没有用处(但也没有坏处)。

所以我建议你改用这个命令来链接:

gcc -shared -o main.dll main.o -lopengl32 -lglut32

【讨论】:

谢谢回答,三个问题你的回答1. ok, my project added the library dependencies glut32.lib, glu32.lib, opengl32.lib2. i make to poring .so file for android, so i need to .so file3.i trying to your command 'gcc -shared -o main.dll main.o -lopengl32 -lglut32' but appended can not find -glut32(-lopengl32 is ok) @heeyongeom:如果您的目标是 Android,那么您可能已经加载到项目中的任何 DLL 都没有用处。您也不能在 Android 上使用 GLUT。为 Android 开发 OpenGL 应用程序与您在 Windows 或常规 *nix 上所做的非常不同,因为您最终将生活在“Dalvik”运行时环境中并生活在 GLSurfaceView 中。共享对象的用途也有限(仅适用于 NDK 的东西)。 据我所知,.so 文件可以使用 NDK 或 JNI 移植 android。然后我制作一个 .so 文件。我制作多平台 Windows 和 android。如何知道你制作了多平台 opengl 还是 opengles?谢谢回答

以上是关于如何在 Windows 中为 opengl 编译 gcc?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 或 Windows 中为 OS X 编译?

如何在 mac 中为 openGL 背景窗口使用纹理 .jpg 图像?

如何在opengl iphone中为纹理提供动画?

如何在 OpenGL 中为 Phong 着色插入法线?

在 C++ 中为 Windows CE 在 Linux 中开发

如何在visual c++中使用OpenGL