Linux, С++, ThirdParty libs

Хорошо, просто вопрос. Я программирую на Visual С++ в Windows и для учебных целей изменился на Ubuntu и начал работать в Code:: Blocks, CodeLite и Eclipse. Я написал простую программу, используя SDL2 и GLEW, чтобы создать простое приложение OpenGL на основе окна SDL2. Я загрузил библиотеки с командами:

sudo apt-get install...

Мой главный вопрос: поскольку это приложение зависит от внешних библиотек (SDL2, GLEW, flu, OIS), оно не работает на других Linux-компьютерах. После установки всех этих библиотек с помощью команд терминала программа работает иначе, не будет выполнена. Мой вопрос в том, можно ли создать программу, которая не должна будет устанавливать эти библиотеки. Например, в Windows вы привязываете свою программу к SDL2.lib и включаете SDL2.dll в папку .exe. Как я могу это сделать на linux. У меня очень мало опыта программирования linux и того, как работает материал, поэтому я надеюсь, что это просто основная проблема.:)

Ответы

Ответ 1

В Linux эквивалентны файлам dll являются файлы .so. Поэтому вам нужно доставить их вместе с вами.

Вы также можете связать статически с библиотеками. Это должно быть окончание .a. С ними они напрямую скомпилируются в вашу программу, и вам не нужно их доставлять.

Более продвинутый (Linux-подобный) подход:

Что обычно делается в Linux (в качестве примера теперь Debian/Ubuntu) вы создаете пакет (в случае debian a .deb -file - debian package). В этих пакетах вы можете добавить метаинформацию, например, о том, какие другие пакеты она зависит (эти пакеты можно установить с помощью apt-get).

Когда вы затем установите пакет вручную с помощью dpkg, он скажет вам, что зависимости отсутствуют, и вы можете исправить их с помощью apt-get -f install. Вы также можете создать свой собственный apt-репозиторий, и он установит вашу программу с зависимостями только с помощью apt-get install ...

Другие дистрибутивы Linux имеют другие системы управления пакетами. Это как пример для debian/ubuntu.

Ответ 2

В связи с хорошим ответом от Hayt, я думаю, стоит упомянуть, что "классический" подход UNIX будет "компилироваться из коробки". Значение: вы фактически указываете "внешние" зависимости, которые необходимы вашей программе для компиляции; и вы в основном позволяете людям просто загружать некоторый исходный архив; и при извлечении... run

./configure
make
make install

или что-то подобное в их системе.

В этом случае инструмент "configure" проверяет все необходимые зависимости. См. здесь для дальнейшего чтения.

В настоящее время распространение пакетов DEB, RPM,... намного чаще; но есть определенная красота в том, что вы можете просто загрузить некоторые sources.tar.gz откуда-то; запускать эти три команды и иметь рабочую установку на основе локального компиляции в течение нескольких минут. Особенно, когда ваши пользователи могут захотеть сделать изменения исходным кодом. Но, конечно, это требует гораздо больше размышлений на вашем конце - поскольку вы хотите как можно больше ограничить свои "зависимости"; другими словами: вы хотите быть "стандартным", насколько это возможно.

Ответ 3

Одним из способов упрощения установки приложения является его упаковка (предполагается, что Ubuntu здесь). Предположим, вы создали свое приложение под названием foobar. Создайте следующую структуру каталогов:

foobar_1.0/
|-- usr/local/bin
|             `-- foobar
`-- DEBIAN/
    `--  control

и поместите следующий текст в файл DEBIAN/control:

Package: foobar
Version: 1.0
Section: games
Priority: optional
Architecture: i386
Depends: libsdl2, libglew1.10, anotherLibrary, yetAnotherOne
Maintainer: Your Name <[email protected]>
Description: A neat package which does foo and bar

Теперь вы можете создать свой пакет с помощью

dpkg-deb --build foobar_1.0

Затем ваши пользователи должны будут установить foobar с помощью dpkg -i foobar_1.0.deb, который установит foobar в /usr/local/bin. Этот каталог предназначен для программного обеспечения, которое вы создаете из источников или устанавливаете из неофициальных пакетов, избегая возможных конфликтов имен в /usr/bin (где исполняются бинарные файлы из официальных пакетов).

Если вашим пользователям не хватает каких-либо зависимостей, перечисленных в DEBIAN/control, они будут рассказаны об этом во время установки. Простое выполнение apt-get -f install установит их. Удаление foobar также помечает эти зависимости как неиспользуемые, поэтому пользователям будет предложено удалить их, когда они удаляют ваш пакет.