Переносимый скомпилированный исполняемый файл Linux с OpenGL / Mesa3D

Я читал о кросс-платформенной разработке с OpenGL для игр. Мы рассматриваем возможность разработки игры, которая будет доступна и для пользователей Linux. Однако я наткнулся на то, что не совсем понимаю.

Как создать переносимый исполняемый файл Linux? В частности, как заставить различные версии OpenGL / Mesa3D работать в одном (или нескольких) исполняемых файлах (мы не хотим распространять исходный код).

О вопросах Linux http://www.linuxquestions.org/questions/linux-software-2/hardware-acceleration-using-opengl-and-x11-876634/ кто-то подробно расскажет, как работает Mesa3D/OpenGL, но с чем я борюсь чтобы увидеть, как я буду использовать версию Mesa3D каждого дистрибутива в моем скомпилированном исполняемом файле (даже не уверен, что это возможно).

Из того, что я могу сказать, мне необходимо динамически связывать части приложения вместе на компьютере каждого пользователя, возможно, с помощью установщика? Если это так, можем ли мы частично скомпилировать программу и связать ее во время выполнения для Mesa3D/OpenGL так же, как dll OpenGL может делать это в Windows?


person Ian Cant    schedule 17.07.2012    source источник
comment
Вы можете использовать общие объекты (.so), похожие на .dlls. Рекомендуемым методом является предварительная компиляция пакетов (например, .deb, .rpm), которые пользователи могут легко установить. Эти пакеты могут объявлять зависимости от других пакетов, то есть определенных версий библиотеки, которые затем будут установлены автоматически. Должна быть куча туториалов по упаковке.   -  person amon    schedule 18.07.2012
comment
да, вам просто нужно дать ссылку на libGL.so.1   -  person Robert Rouhani    schedule 18.07.2012
comment
Избавьте себя от хлопот и используйте GLEW.   -  person Brett Hale    schedule 18.07.2012
comment
@BrettHale: GLEW управляет только расширениями. ОП спрашивает о самом OpenGL.   -  person datenwolf    schedule 18.07.2012
comment
Эта часть вопросов тоже верна! Просто я не могу отметить его ответом!   -  person Ian Cant    schedule 31.07.2012


Ответы (1)


Просто свяжите свой исполняемый файл динамически с libGL.so и покончите с этим. Бинарный интерфейс этого является общим для всех реализаций OpenGL.

Из того, что я могу сказать, мне необходимо динамически связывать части приложения вместе на компьютере каждого пользователя, возможно, с помощью установщика?

Ни вы, ни установщик не делаете ссылки. Динамическое связывание происходит автоматически при загрузке исполняемого файла. Динамическая компоновка — это то, как библиотеки DLL загружаются в Windows, а общие объекты *nix — аналог (.so) в *nix.

При создании программы вы добавляете параметр -lGL в командную строку компоновщика, и он добавит запись динамической компоновки libGL.so в исполняемый файл. Что вы можете потом перераспределить. Когда программа запускается в целевой системе, динамический компоновщик найдет libGL.so и загрузит его.

person datenwolf    schedule 17.07.2012