Я пытаюсь скомпилировать glfw как статическую ссылку на Linux Mint (на основе Ubuntu 10.04), используя GCC 4.4.3.
Внутри моего каталога проекта я получил "external / glfw", который содержит исходный код glfw 2.7.1. Я скомпилировал его, запустив «make x11-install», который дает:
- / USR / местные / включить / GL / glfw.h
- / USR / местные / Библиотека / libglfw.a
- / USR / местные / Библиотека / pkg-config / 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
EDIT 1 : Я думаю, что проблема заключается в процессе связывания, а не в коде. Потому что, если у меня установлены libglfw2 и libglfw-dev (пакеты ubuntu), то исполняемый файл работает очень хорошо. Здесь я хочу, чтобы glfw был статически связан, а не полагался на либ-пакеты общего доступа к дистрибутиву для запуска двоичного файла.
РЕДАКТИРОВАТЬ 2 в соответствии с предложением datenwolf, которое я пытался отладить с помощью GDB. Я никогда не использовал GDB, но я часто использую Perl отладчик. как-то они имеют много общего. я перекомпилирую glfw и мой test.c с -ggdb.
, передаваемый с помощью gdb, показывает, что мой код входит в glfwOpenWindow (), который находится в "window.c" в исходном коде glfw. Так как я новичок в GDB, я не знаю, как оценить выражение или получить значение переменных. на основе быстрого поиска в Google все, что я знаю, это "Whatis", чтобы увидеть тип даты. но я думаю, что мой код останавливается, когда он достиг строки 484 в "window.c"
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 и старом nabble мне удалось записать, что нужно сделать для статически связанных GLFW и GLEW, и поместить его в http://www.phacks.net/static-compile-glfw-and-glew/