расположение библиотеки для проекта - PullRequest
2 голосов
/ 20 сентября 2010

Я начал проект C ++ SFML для Linux. Мне было интересно, где .so должны идти. Должны ли они войти в папку проекта, чтобы пользователь мог просто запустить программу после того, как он ее получил? Или пользователь должен установить библиотеку SFML на Linux-машине, прежде чем запускать мою программу?

Ответы [ 3 ]

2 голосов
/ 21 сентября 2010

Даже если вы включили файлы .so, у вас нет гарантии, что пользователь сможет запустить его (другая архитектура, библиотеки, связанные с разными libc, ...). Либо связывайте статически, либо, что еще лучше, просто дайте им самим предоставить вспомогательные библиотеки.

@ Хороший ответ - ответ Джоэла Дж. Адамсона на использование autoconf. SFML не поставляется с pkg-config файлом, поэтому вы будете проверять SFML следующим образом:

dnl Checking for a C++ compiler
AC_PROG_CXX

dnl Checking C++ features. This tells configure to use the C++ compiler for checks.
AC_LANG_PUSH([C++])
dnl Check for a SFML header.
AC_CHECK_HEADER([SFML/Config.hpp], [], [AC_MSG_ERROR([SFML headers not found.])])
AC_LANG_POP([C++])

Проверка библиотек немного сложнее из-за искажения имен и так далее. Тайлер МакГенри написал хорошую статью на эту часть, если вы хотите быть тщательным.

1 голос
/ 21 сентября 2010

На уровне распространения SFML будет зависимостью, то есть пользователь должен будет установить его (или его должен будет установить менеджер пакетов) перед компиляцией вашей программы. Если пользователь хочет скомпилировать его, ему также понадобятся заголовочные файлы (часто для установки требуется отдельный пакет «devel»). Вам не нужно распространять файлы .so, и, вероятно, лучше (для всех), если вы этого не сделаете.

Вам нужно будет проверить, есть ли у пользователя, например, используя autoconf , вам нужно проверить соответствующие заголовки в вашем configure.ac для проекта приложения. Например, для проверки математической библиотеки, потому что я использую функцию exp(), я буду использовать

AC_CHECK_LIB([m], [exp])

для создания проверки на шаге configure. К счастью autoscan может проверить это и создать скелетный файл configure.ac с именем configure.scan. Смотри также Cmake .

НТН.

0 голосов
/ 21 сентября 2010

Вы должны сделать свою программу зависимой от конкретной библиотеки (и версии), в которой она нуждается.Если вы планируете упаковать его в файл rpm / deb, вы также должны добавить туда зависимость, чтобы ее могли проверить и применить менеджеры пакетов (например, apt может установить все пакеты зависимостей данного пакета)

...