Я сделал игру с использованием C++ и Allegro 5, она отлично работает на моем компьютере с Linux. Я хотел бы знать, как создать пакет, который я мог бы экспортировать на другой компьютер Linux, и запустить его без установки Allegro. СпасибоКак запустить программу на других компьютерах?
ответ
Мне нужно было понять это несколько лет назад, а следующее - руководство, основанное на шагах, которые работали для меня. Там может быть «лучший» способ статически связать с аллегро.
Для начала вам понадобятся статические библиотеки для аллегро. Если ваш дистрибутив не упаковать их, вы должны будете строить их самостоятельно:
- Clone исходный код (предположим, вы клонировать его в папку с именем
allegro
). - Создать каталог по строительству:
cd allegro && mkdir build && cd build
cmake .. -DSHARED=off
. Это указывает, что мы хотим, чтобы статические (не разделяемые) библиотекиmake
- Теперь вы должны увидеть библиотеки, заканчивающиеся с расширением
.a
подlib
в директории сборки.
Теперь вы можете связать со статическими библиотеками, как так:
gcc main.c -o main -Lpath/to/allegro/build/lib -lallegro-static
Если вы не установите статические библиотеки в стандартном пути к библиотеке (например, /USR/Lib) вам нужно -L
аргумента, чтобы обеспечить компоновщик с дорожкой к статическим библиотекам , которые вы только что создали.
Если вы попробуете вышеуказанное, вы заметите ряд ошибок компоновщика в других библиотеках . При связывании статически вам нужно будет вручную указать линкеры флагов зависимостям аллегро. Честно говоря, я не помню, почему это так, но Я просто знаю, что я должен это сделать.
Чтобы определить эти зависимости, попробуйте строить свою программу один раз с общим библиотек:
gcc main.c -o main -lallegro
Затем запустите ldd
на результирующий двоичный файл (main
). Вы должны увидеть что-то вроде:
linux-vdso.so.1 (0x00007fff1dbfd000)
liballegro.so.5.2 => /usr/lib/liballegro.so.5.2 (0x00007f8b802ea000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f8b7ff4c000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f8b7fc48000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f8b7fa2b000)
...
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f8b7c551000)
Воплощения каждого из них в флаги компоновщика, ваша последняя команда будет выглядеть следующим образом:
gcc main.c -o main -lallegro -lm -lpthread -lX11 ...
Вы заметите, вы не должны связать со всем на выходе ldd
, вы можете найти с ним , чтобы найти минимальный набор флагов компоновщика, в котором вы нуждаетесь. Вам потребуется дополнительных флагов компоновщика, если вы подключаетесь к дополнительным модулям. Например, для ссылки на библиотеку PNG для привязки к lallegro_audio-static
потребуются флаги, например -lpng
.
В конце концов вы найдете набор флагов, который позволяет связывать статически с allegro.Чтобы проверить результат, запустите ldd
на свой статически связанный бинарный файл; вы должны заметить, что allegro
больше не входит в число выходных данных, так как пользователям будет больше не нужно динамически связываться с аллегро.
Ответ для Allegro одинаковый для любой библиотеки. Это не делает ничего особенного. Ответ предыдущего плаката идет на детали реализации, поэтому я ударил его с перспективы в 10 000 футов:
У вас есть три возможности для ЛЮБОЙ библиотеки.
Скомпилировать библиотеку статически.
Скомпилируйте библиотеку «динамически» и отправьте файлы библиотеки Allegro с помощью вашей программы. (* .DLL для Windows, * .SO «общий объект» для Linux.) Файлы идут в том же каталоге, что и исполняемый файл.
Комбинируйте библиотеку «динамически», как и раньше, но полагайтесь на библиотеку, которая уже установлена в системе в системном каталоге. (например, windows \ system32)
В первом случае код библиотеки физически добавляется в вашу программу.
Второй случай и третий случай идентичны, за исключением того, что вы упаковываете вместе с ним. Ваша программа скомпилирована (но без включенного в нее кода библиотеки Allegro) и сообщила, что она «найдет» библиотеку после ее запуска. При запуске компоновщик времени выполнения (LD в Linux, запуск man ld для получения дополнительной информации) отображает список требуемых символов вашего кода (внешние функции и глобальные переменные), проверяет подходящие библиотеки соответствия в вашем стартовом каталоге, если нет, проверяет другие системные каталоги.
Второй случай помещает необходимые файлы в вашу программу.
Третий случай зависит от требуемых файлов, которые уже установлены, или от доставки с помощью внешнего установщика «времени выполнения», который очень часто делает Microsoft. (Время выполнения DirectX, время автономной работы Visual C++ и т. Д.)
Итак, поскольку вы ориентируетесь на Linux, вы можете использовать первый или второй случай. Скомпилируйте свою конкретную версию Allegro в свой код или отправьте версию, которую вы хотите, с кодом. Во втором случае преимущества - это то, что вы можете изменить файлы DLL/SO на более позднюю дату, не обязательно компилируя (для исправления/исправления), и если у вас несколько исполняемых файлов, вам нужен только один набор кода библиотеки.
Следует отметить, что не все библиотеки позволяют вам (из-за своей лицензии) включать в свою программу двоичные файлы. Вот почему вы часто видите «Распространяемые Microsoft». Однако лицензии Allegro не волнует.
- 1. Открыть программу на других компьютерах
- 2. Невозможно запустить макрос VBA на других компьютерах
- 3. Показать MessageBox на других компьютерах
- 4. Как запустить программу MPI на нескольких компьютерах на окнах?
- 5. Как сделать мою программу не запущенной на других компьютерах?
- 6. как запустить .exe файл java-файла на других компьютерах
- 7. Как запустить приложения Qt 5 на других компьютерах (Windows 7)
- 8. Моя программа не запускается на других компьютерах
- 9. Исполняемая банка не работает на других компьютерах
- 10. Запуск программы OpenGL на других компьютерах
- 11. Возможно ли запустить старую программу MSDOS.EXE на современных компьютерах?
- 12. Сессия видна на других компьютерах?
- 13. Запуск Allegro 5 на других компьютерах
- 14. Как вызвать функции на других компьютерах?
- 15. WFA не открывается на других компьютерах
- 16. Как сделать программу с такой же скоростью на разных компьютерах?
- 17. Как запустить сервер elasticsearch на разных компьютерах?
- 18. Как я могу запустить свою программу на разных компьютерах без установки установщика?
- 19. C# Сделать приложение совместимым на других компьютерах?
- 20. Шрифты, не работающие на других компьютерах
- 21. Ошибка основного класса на других компьютерах
- 22. База данных SQL, работающая на других компьютерах
- 23. Открытые ссылки с Java на других компьютерах
- 24. Содержимое Joomla не отображается на других компьютерах
- 25. Как запустить программу на Python?
- 26. Как запустить программу на Ubuntu?
- 27. Как запустить java-программу быстрее?
- 28. Приложение ConnectionKit не открывается на других компьютерах
- 29. H2: Ошибка на всех других компьютерах
- 30. Приложение vb.net не работает на других компьютерах?
Проверьте документацию allegro, возможно, они говорят, как упаковать библиотеку вместе с приложениями. – Barmar
Скомпилируйте код в файл ('.o') и свяжите его статически с файлами allegro, возможно, удалив неиспользуемые символы. Это может быть не законным, однако вам следует подумать о том, чтобы прочитать лицензию allegro для получения информации о ее распространении вместе с вашей программой. – ForceBru
https://wiki.allegro.cc/index.php?title=Static_and_Dynamic_Link прочитайте раздел статической ссылки – willll