我试图使用GCC 4.4.3在Linux (基于Ubuntu10.04)上将glfw编译为静态链接。
在我的项目目录中,我得到了“外部/ glfw”,其中包含glfw 2.7.1源代码。我通过运行“makex11-install”来编译它,它提供了:
我还在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静态链接,而不是依赖发行版包共享库来运行二进制文件。
根据数据狼的建议,编辑2,我试着用gdb进行调试。我以前从未使用过gdb,但我经常使用perl调试器。不知怎么的,他们有很多相似之处。我用-ggdb重新编译glfw和test.c。
在gdb中,它显示了我的代码进入了glfwOpenWindow(),它位于glfw源代码中的"window.c“中。因为我刚开始使用gdb,所以我不知道如何计算表达式或获取变量的值。在google上快速搜索的基础上,我所知道的就是看到日期类型的“什么东西”。但我认为我的代码在到达"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谢谢您的帮助。在一些堆叠溢出和旧抓取的人的帮助下,我设法把它写下来了,需要做些什么来静态地链接GLFW和GLEW,并把它放在http://www.phacks.net/static-compile-glfw-and-glew/上。
发布于 2011-08-21 16:31:57
那么您的错误是对glfwOpenWindow的调用失败了吗?在调用unresolved symbol或shared 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 )这是大多数系统都能支持的。
发布于 2011-09-07 13:40:59
您的示例程序请求OpenGL 3.1和上下文配置文件。配置文件只为OpenGL 3.2及以上版本定义,这很可能是glfwOpenWindow在这种情况下失败的原因。若要解决此问题,请请求高于3.2的版本或等于3.2,或删除对上下文配置文件的请求。
有关使用GLX创建现代OpenGL上下文的更多信息,请参见http://www.opengl.org/registry/specs/ARB/glx_create_context.txt。
https://stackoverflow.com/questions/7139086
复制相似问题