静态编译glfw

我正在使用GCC 4.4.3编译glfw作为Linux Mint(基于Ubuntu 10.04)的静态链接。

在我的项目目录中,我得到了“external / glfw”,其中包含glfw 2.7.1源代码。 我通过运行“make x11-install”来编译它,它给出:

  • /usr/local/include/GL/glfw.h
  • /usr/local/lib/libglfw.a
  • /usr/local/lib/pkgconfig/libglfw.pc

我也在test.c中得到了这个简单的代码:

#include <stdio.h> #include <stdlib.h> #include "external/glfw/include/GL/glfw.h" int main( int argc, char const* argv[] ) { if( !glfwInit() ){ fprintf( stderr, "glfwInit Failed\n" ); } glfwOpenWindowHint( GLFW_FSAA_SAMPLES, 4 ); glfwOpenWindowHint( GLFW_OPENGL_VERSION_MAJOR, 3 ); glfwOpenWindowHint( GLFW_OPENGL_VERSION_MINOR, 1 ); glfwOpenWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE ); // Open a window and create its OpenGL context if( !glfwOpenWindow( 1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW )){ fprintf( stderr, "glfwOpenWindow failed\n" ); glfwTerminate(); return -1; } return 0; } 

我试图编译glfw作为静态链接和编译使用gcc与代码的代码:

 /usr/bin/gcc `pkg-config --cflags libglfw` -o test test.c \ `pkg-config --libs libglfw` -lXrandr -lX11 -lGLU -lGL -pthread -lm 

它不会给我任何错误。 但是当我尝试执行二进制文件,它显示我没有打电话给glfwOpenWindow。

请任何人帮助我吗? 谢谢你的时间家伙!

干杯!

P

编辑1 :我认为问题在于链接过程而不是代码。 因为如果我安装了libglfw2和libglfw-dev(ubuntu软件包),那么这个可执行文件运行得很好。 我在这里想要的是有glfw静态链接,而不是依靠distro包共享库的二进制运行。

编辑2按照datenwolfbuild议我试图用gdb进行debugging。 我从来没有使用gdb,但我使用perldebugging器很多。 不知何故它们有很多相似之处。 我重新编译glfw和我的test.c与-ggdb。

与GDBstream动它显示我的代码进入glfw源代码中的“window.c”glfwOpenWindow()。 因为我是新来的gdb我不知道如何评估expression式或获取variables的值。 基于谷歌快速search所有我知道是“whatis”看datetypes。 但我认为我的代码在“window.c”中到达第484行时停止

 if( wndconfig.glProfile && ( wndconfig.glMajor < 3 || ( wndconfig.glMajor == 3 && wndconfig.glMinor < 2 ) ) ) { // Context profiles are only defined for OpenGL version 3.2 and above return GL_FALSE; } 

现在我不知道如何使用静态链接glfw认为我不在OpenGL 3.2及以上,而有libglfw2安装它工作得很好吗?

感谢您的帮助家伙! 特别是datenwolf!

编辑3感谢帮助家伙。 在从stackoverflow和旧的一些人的帮助后,我设法写下静态链接的GLFW和GLEW需要做什么,并把它放在http://www.phacks.net/static-compile-glfw-and-glew /

所以你的错误是调用glfwOpenWindow失败? 没有unresolved symbolshared object not found消息甚至main()被调用之前? 然后你成功地与GLFW静态链接。

我认为你的问题在于你传递给glfwOpenWindow的参数:

 glfwOpenWindow( 1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW ) 

所以你要求每个通道的红色,绿色或蓝色位数为零,但是有32位深度位。 我怀疑你的系统支持。 我会尝试

 glfwOpenWindow( 1024, 768, 8,8,8,0, 24, 8, GLFW_WINDOW ) 

这就是大多数系统所支持的。

您的示例程序请求OpenGL 3.1 上下文配置文件。 配置文件只为OpenGL 3.2及更高版本定义,这很可能是为什么glfwOpenWindow在这种情况下失败。 要解决这个问题,要么请求高于或等于3.2的版本,要么删除上下文配置文件的请求。

有关使用GLX创建现代OpenGL上下文的更多信息,GLFW的这一部分是精简层,请参阅http://www.opengl.org/registry/specs/ARB/glx_create_context.txt