链接库不像指定库的路径和头文件的路径那么简单?

问题描述:

语境:链接库不像指定库的路径和头文件的路径那么简单?

  • cygwin的-gcc作为我的终端和编译器

  • 试图使用OpenGL我的程序,它需要GLEW扩展,使其工作。我选择将我的程序动态链接到所需的库。

  • 下载,安装,glew库和头文件。

  • 将.dll文件放在usr/local/lib文件夹中,包括原本来自system32文件夹的opengl32.dll文件,用于测试但仍然不起作用。在/ usr /本地/

  • 将头文件包括文件夹

问题:

  • 获取underfined引用功能。

输入命令:

gcc -o TestGameBoy TestGameBoy.c -I/usr/local/include/GL -L/usr/local/lib -lglew32 -lglu32 -lopengl32 

编辑:-opengl32改为-lopengl32只是一个错字。

链接输出错误:

/tmp/cc0Qp34q.o: In function `initWindowComponents': 
/cygdrive/d/DMG_Emulator/BGWindow.c:35: undefined reference to `glewExperimental' 
/cygdrive/d/DMG_Emulator/BGWindow.c:36: undefined reference to `glewInit' 
/cygdrive/d/DMG_Emulator/BGWindow.c:48: undefined reference to `glGenTextures' 
/cygdrive/d/DMG_Emulator/BGWindow.c:50: undefined reference to `glBindTexture' 
/cygdrive/d/DMG_Emulator/BGWindow.c:54: undefined reference to `glTexImage2D' 
collect2: error: ld returned 1 exit status 

注:我没有包含在SDL一部分,因为它已经工作。我设法遵循它的参数列表,但不知何故不适合笨拙。

我喜欢相信这是因为链接器实际上没有将库加载到内存中。所以它不能将那些需要数据的程序集调用填充到需要定义的内存地址的函数内存空间中?我不知道我主要是在观看视频后看到我的问题。但这对我来说确实有道理,尽管我无法让它工作。

+1

它不应该是'-lopengl32'吗? – ybungalobill

+0

我刚刚重新输入命令行,但实际上我的输入是什么。 – butchtiki

+0

如果你在'TestGameBoy.c'之前加了'-lglew32 -lglu32 -lopengl32',它会起作用吗? – SurvivalMachine

从不(!!!)触摸任何驻留在system32SysWow64!这些都是操作系统资源,搞乱了这些资源,从长远来看会引起很多头痛。

至于使用(现代)OpenGL与Cygwin ...这是一种PITA。您将XWin/GLX包装器放在两者之间,以便为X11编写的程序可以在Cygwin X11服务器内运行。这反过来意味着你正在处理Cygwin * nix-ish OpenGL库名称,即-lGL -lGLX -l…(可能还需要X库)。这也意味着你不能在纯Cygwin环境中直接与原生OpenGL实现对话。

链接器调用中可能存在(可能是)错误。这通常是-l…但你有-opengl32那里(删除l)。然而,链接器应该抱怨指定的每个错误的选项或库,但它找不到。

我强烈建议使用MinGW/MSys2而不是Cygwin,它可以为您提供真正的本机Windows API环境,并使事情变得更容易。 MSys2使用Pacman软件包管理器(Arch Linux),并且与环境一起工作非常愉快。它给你所有的* nix-ish开发工具(GCC/Clang,Shells等),而且是原生的Win32。

opengl32.dll是一个共享库,但不是编译器所需的导入库。 opengl32.dll也与预期的cygwin中的共享库名称不同,即cyg*.dll

安装cygwin libGLEW-devel包。它将对
https://cygwin.com/packages/x86_64/libGLEW-devel/libGLEW-devel-1.13.0-1

2016-07-21 22:36  1018809 usr/include/GL/glew.h 
2016-07-21 22:36  73140 usr/include/GL/glxew.h 
2016-07-21 22:36   0 usr/lib/ 
2016-07-21 22:36  2106644 usr/lib/libGLEW.dll.a 
2016-07-21 22:36  1667262 usr/lib/libGLEWmx.dll.a 
2016-07-21 22:36   0 usr/lib/pkgconfig/ 
2016-07-21 22:36   222 usr/lib/pkgconfig/glew.pc 
2016-07-21 22:36   233 usr/lib/pkgconfig/glewmx.pc 

正确GLEW导入库和头

内容列出还有一个glewOpenGL Extension Wrangler demos,你可以用它来测试正确安装。