我正在尝试使用 GCC 4.4.3 在 Linux Mint(基于 Ubuntu 10.04)上将 glfw 编译为静态链接。
在我的项目目录中,我得到了包含 glfw 2.7.1 源代码的“external/glfw”。我通过运行“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。
有人能帮帮我吗?谢谢你们的时间!
干杯!
磷
编辑1:我认为问题在于链接过程而不是代码。因为如果我安装了 libglfw2 和 libglfw-dev(ubuntu 包),那么可执行文件运行得很好。我在这里想要的是静态链接glfw,而不是依赖发行包共享库来运行二进制文件。
根据 datenwolf 的建议编辑 2 ,我尝试使用 gdb 进行调试。我以前从未使用过 gdb,但我经常使用 perl 调试器。不知何故,他们有很多相似之处。我用-ggdb重新编译glfw和我的test.c。
与gdb一起流动表明我的代码进入了glfwOpenWindow(),它位于glfw源代码的“window.c”中。因为我是 gdb 的新手,所以我不知道如何评估表达式或获取变量的值。基于谷歌上的快速搜索,我只知道“whatis”来查看日期类型。但我认为我的代码在“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 它工作得很好?
谢谢你们的帮助!特别是约会狼!
编辑 3感谢您的帮助。在 stackoverflow 和老 nabble 的一些人的帮助下,我设法写下静态链接 GLFW 和 GLEW 需要做的事情,并将其放在http://www.phacks.net/static-compile-glfw-and-glew /