Компиляция Win64 версий GLFW под mingw64

во-первых, мне действительно нужно сделать 64-битную версию glfwdll.a и glfw.dll (чтобы я, надеюсь, наконец-то смог добиться того, чтобы привязки Go glfw работали под Windows... под Linux это было очень просто!)

Похоже, мне удалось скомпилировать 64-битные версии glfwdll.a и glfw.dll с использованием mingw64, MSYS и их make-скриптов, хотя я получил пару сообщений об ошибках типа «точка входа maincrt не найдена, используя значение по умолчанию 0xsomehexnumber». вместо" или что-то в этом роде. Точки входа, конечно же, относятся к исполняемым файлам, в данном случае к тем, которые находятся в каталоге примеров.

И действительно, большинство из них не работают! Однако все построили. Работают следующие исполняемые файлы:

listmodes.exe mtbench.exe mthello.exe и частицы.exe - последний является единственным графическим (3D gfx) примером, работающим для меня (первые просто выводят некоторую тестовую информацию в окно консоли).

А что сейчас с остальными? Не вылетают, в консоль ничего не сообщают... Запускаю, возвращаются сразу, молча.

Моя сборка GLFW сломана? Как исправить? В чем большая разница между 4 примерами, которые работают, и другими, которые не работают?

Это довольно новая 64-битная установка Win7. Никакого хлама, все обновлено, UAC и темы отключены, вообще не установлено много программного обеспечения, обновлен драйвер графического процессора Nvidia (GPU Caps Viewer и тому подобное работают нормально, так что OpenGL есть).


person metaleap    schedule 28.04.2012    source источник


Ответы (2)


Мне еще не разрешено добавлять комментарии, поэтому я опубликую это как ответ.

Проблема, с которой вы столкнулись, связана с тремя отдельными ошибками в GLFW. Я исправил их сегодня, и исправления будут включены в GLFW 2.7.6. До тех пор вы можете использовать магистраль из репозитория GLFW Subversion.

person elmindreda    schedule 02.07.2012
comment
Теперь все отлично работает с новейшими выпусками Go, GLFW и Mingw-w64. Спасибо еще раз! - person metaleap; 11.10.2012

Чтобы убедиться, что у вас действительно нет проблем с DLL-адами с opengl32.dll, glu32.dll, glut32.dll и т. д., проверьте средство просмотра событий и посмотрите, нет ли каких-либо предупреждений или ошибок для вашего приложения.

Это моя мысль, потому что вы можете запускать только mtbench и mthello, которые не имеют ничего общего с «настоящим» API OpenGL.

Но ничего не известно о частицах.exe - может быть, GLFW проверяет ошибки внутри и вызывает процедуру exit ()? Также проверьте %errorlevel%.

Также посмотрите здесь: http://glfw.svn.sourceforge.net/viewvc/glfw/trunk/examples/pong3d.c?revision=1110&view=markup

Существует функция GameMenu(), которая может закрыться автоматически, если "!glfwGetWindowParam( GLFW_OPENED )", что, очевидно, означает, что OpenGL не инициализирован.

Эта же функция служит флагом выхода здесь http://glfw.svn.sourceforge.net/viewvc/glfw/trunk/examples/wave.c?revision=1110&view=markup

Еще раз перепроверьте библиотеки DLL!

Я полагаю, что у вас есть опыт, чтобы не совершать «продвинутых» ошибок в процессе сборки, поэтому на «пользовательском уровне» могут происходить какие-то забавные вещи.

И еще одно предложение: http://sourceforge.net/projects/glfw/forums/forum/247562/topic/3868944

Некоторые параметры могут не работать именно для вас.

Чтобы «исправить» примеры, попробуйте закомментировать вызов glfwGetWindowParam.

person Viktor Latypov    schedule 28.04.2012
comment
На самом деле мой вопрос был выбран плохо - реальная проблема в том, что сама сборка не завершается так, как предполагалось. Я получаю предупреждения о входных символах для всех, кроме 4 упомянутых примеров. Так что неудивительно, что они не работают. Также возникают ошибки компоновщика в конце процесса создания, поэтому, хотя библиотеки действительно собираются, они должны быть несколько ошибочными сборками для начала. После этого в отдельной ветке и зарегистрировали проблему в трекере GLFW. Спасибо за эти указатели, тем не менее, полезные знания там! - person metaleap; 30.04.2012
comment
ХОРОШО. В любом случае, компиляция/сборка с разновидностями GCC в Win32 всегда близка к кошмару :) Сам я никогда не любил cygwin/msys :) - person Viktor Latypov; 30.04.2012
comment
В целом я очень доволен Go, но поскольку они выбрали gcc для взаимодействия с C, у меня нет выбора в этой части. :) - person metaleap; 30.04.2012
comment
Кстати, частицы.exe — это единственный пример приложения (GUI), скомпилированного/связанного с -mconsole вместо -mwindows. Следовательно, здесь нет проблем с входным символом. - person metaleap; 30.04.2012