Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/165: Рейтинг темы: голосов - 165, средняя оценка - 4.53
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469

Подключение библиотеки в g++

30.09.2018, 02:59. Показов 31080. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Оговорюсь, пишу на эмоциях, так как уже нервов не хватает на все это.

**************************************** ********************

В общем, в одной из своих предыдущих тем я просил о помощи со сборкой библиотеки с помощью (боже упаси меня) cmake. Естесна у меня ничего не получилось, т.к. библиотека требовала овер много зависимостей и тянуть их очень муторно. Выбрал другую (вот ссылка на нее https://github.com/zsbzsb/Motion). Начал собирать ее: появилось сообщение об ошибке:

CMake Error at src/Motion/CMakeLists.txt:26 (find_package):
By not providing "FindSFML.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "SFML", but
CMake did not find one.

Could not find a package configuration file provided by "SFML" (requested
version 2) with any of the following names:

SFMLConfig.cmake
sfml-config.cmake

Add the installation prefix of "SFML" to CMAKE_PREFIX_PATH or set
"SFML_DIR" to a directory containing one of the above files. If "SFML"
provides a separate development package or SDK, be sure it has been
installed.


-- Configuring incomplete, errors occurred!
See also "/home/***/Motion/Motion/CMakeFiles/CMakeOutput.log".

Ок, гуглил - не нашел то что нужно. Попытался собрать еще раз, соответственно те же ошибки.
Принял гениальное решение: зайти в cmake файл и удалить 26 проблемную строчку. Та-дам, все получилось, но не так, как было задумано.
То есть такой код не работал:
C++
1
#include <Motion/Motion.hpp>
Компилятор ругался на отсутствие этой библиотеки.
И тут я принял второе гениальное решение: прописать компилятору путь до исходников:
Bash
1
g++ -std=c++17 -I/home/***/Motion/Motion/include/  Basic\Guide.cpp
Конечно же я осознавал, что компилятор просто не скомпилирует это.
И вот проходит секунда компиляции, и g++ добродушно посылает меня:
Bash
1
2
3
4
5
6
7
8
 
In file included from /home/***/Motion/Motion/include/Motion/DataSource.hpp:22:0,
                 from /home/***/Motion/Motion/include/Motion/Motion.hpp:4,
                 from Basic Guide.cpp:2:
/home/***/Motion/Motion/include/Motion/priv/AudioPacket.hpp:11:10: fatal error: libavformat/avformat.h: Нет такого файла или каталога
 #include <libavformat/avformat.h>
          ^~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
**************************************** ********************

Собственно уже не знаю что и делать, ведь без этой библиотеки весь мой проект сделать не получится.
Очень надеюсь на вашу помощь.

Если же никто не откликнется, я, наверное, навсегда заброшу проект, и буду дальше сидеть и совершенствовать консольный калькулятор.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2018, 02:59
Ответы с готовыми решениями:

Подключение библиотеки Qt
Как подключить библиотеку Qt? Например я хочу включить QtCore в свой проект. #include &lt;QtCore&gt; int main() { ...

Подключение библиотеки
Здраствуйте. Как мне подключить библиотеку к проекту только 1 раз. тоесть есть у меня 4 срр файла каждий поключаен набор библиотек ...

Подключение библиотеки Crypto. Если возможно, нужна ссылка на скачивание данной библиотеки
Возникли сложности с подключением библиотеки Crypto: import Crypto.Cipher.AES Выдает следующую ошибку: ...

28
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
07.10.2018, 18:46  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Croessmah Посмотреть сообщение
Пока требования не выполнены, может вообще не собраться никак.
Вечером попробую собрать у себя.
Собрал библиотеку, и даже (о боги) появился SFMLConfig.cmake в папке, но, увы, Motion не видит его (тут, я так подразумеваю, опять надо править cmake файлы, но полной уверенности не имею)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
07.10.2018, 22:52
Лучший ответ Сообщение было отмечено Pashka Durov как решение

Решение

Цитата Сообщение от Pashka Durov Посмотреть сообщение
но, увы, Motion не видит его
А Вы CMAKE_PREFIX_PATH установили?
Либо можно натравить SFML_DIR на каталог, где лежит SFMLConfig.cmake.
Собственно, CMake Вам об этом и пишет:
Цитата Сообщение от Pashka Durov Посмотреть сообщение
Add the installation prefix of "SFML" to CMAKE_PREFIX_PATHor set "SFML_DIR" to a directory containing one of the above files . If "SFML" provides a separate development package or SDK, be sure it has been installed.
В общем, собрал SFML 2.5, установил в каталог /home/test/sfml
(указал cmake еще параметр -DCMAKE_INSTALL_PREFIX=/home/test/sfml),
т.е. в нем теперь лежат каталоги include, lib, share.
Поставил недостающие зависимости (у Вас еще может чего не хватать):
sudo apt install libavcodec-dev libavformat-dev libswscale-dev
Далее по порядку:
Code
1
2
3
4
5
git clone https://github.com/zsbzsb/Motion.git
cd Motion/Motion
mkdir build && cd build
cmake -DCMAKE_PREFIX_PATH=/home/test/sfml -DCMAKE_INSTALL_PREFIX=/home/test/motion ../
make && make install
Всё собралось, проблем нет.

Также попробовал собрать с указанием SFML_DIR.
SFMLConfig.cmake у меня лежит в /home/test/sfml/lib/cmake/SFML.
cmake -DSFML_DIR=/home/test/sfml/lib/cmake/SFML -DCMAKE_INSTALL_PREFIX=/home/test/motion ../
тоже всё нормально собралось.
1
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
07.10.2018, 23:16  [ТС]
Croessmah, а в какую, по идее, директорию все должно было собраться? А то у меня все ушло в домашнюю папку.
Миниатюры
Подключение библиотеки в g++   Подключение библиотеки в g++  
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
08.10.2018, 08:29
В cmake можно было указать нужный путь:
-DCMAKE_INSTALL_PREFIX=path
1
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
08.10.2018, 23:14  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
В cmake можно было указать нужный путь:
то бишь, чтобы компилятор воспринимал запись #include <Motion/Motion.hpp>, надо -DCMAKE_INSTALL_PREFIX=/usr?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.10.2018, 01:26
Цитата Сообщение от Pashka Durov Посмотреть сообщение
надо -DCMAKE_INSTALL_PREFIX=/usr?
CMAKE_INSTALL_PREFIX задает путь, куда будет установлена библиотека,
т.е. куда make install запихнет файлы библиотеки.
Как правило, по-умолчанию это /usr/local.
Цитата Сообщение от Pashka Durov Посмотреть сообщение
то бишь, чтобы компилятор воспринимал запись #include <Motion/Motion.hpp>
Это уже непосредственно при компиляции проекта, использующего Motion?
Тогда нужно подключить библиотеку Motion в CMakeLists.txt.
1
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
09.10.2018, 17:13  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Это уже непосредственно при компиляции проекта, использующего Motion?
Да
Цитата Сообщение от Croessmah Посмотреть сообщение
Тогда нужно подключить библиотеку Motion в CMakeLists.txt.
Я так понял, делается это так add_executable(Motion.hpp)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.10.2018, 22:00
Лучший ответ Сообщение было отмечено Pashka Durov как решение

Решение

CMakeLists.txt для построения примера из Motion:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
cmake_minimum_required(VERSION 3.2)
 
project(basic_guide)
 
#устанавливаем путь до корневого каталога SFML
set(SFML_ROOT_DIR "/home/croessmah/hdd/test/sfml")
 
#устанавливаем путь до корневого каталога Motion
set(MOTION_ROOT_DIR "/home/croessmah/hdd/test/motion")
 
#Ищем путь к Motion/include
find_path(MOTION_INCLUDES_DIR 
    NAMES "Motion" 
    PATHS ${MOTION_ROOT_DIR} 
    PATH_SUFFIXES "include")
 
#Ищем файл библиотеки Motion в lib
find_library(MOTION_LIBRARY 
    NAMES "Motion" 
    PATHS ${MOTION_ROOT_DIR} 
    PATH_SUFFIXES "lib")
 
#Если не нашли, то
if(NOT MOTION_INCLUDES_DIR OR NOT MOTION_LIBRARY)
    #выводим ошибку и прекращаем выполнение
    message(FATAL_ERROR "Motion not found. Please set MOTION_ROOT_DIR or CMAKE_PREFIX_PATH")
endif()
 
#Выводим информацию
message(STATUS "Motion includes dir: " ${MOTION_INCLUDES_DIR})
message(STATUS "Motion library: " ${MOTION_LIBRARY})
 
#Добавляем Motion/include в пути включений
include_directories(${MOTION_INCLUDES_DIR})
 
#Генерируем SFML_DIR на основании SFML_ROOT_DIR
set(SFML_DIR "${SFML_ROOT_DIR}/lib/cmake/SFML")
 
#Ищем компоненты audio graphics window system библиотеки SFML 2.5, которая обязательна
find_package(SFML 2.5 REQUIRED 
    COMPONENTS audio graphics window system)
 
#Устанавливаем переменную SFML_LIBRARIES со списком библиотек
set(SFML_LIBRARIES 
    sfml-audio sfml-graphics sfml-window sfml-system)
 
#Выводим список библиотек
message(STATUS "SFML libraries: ${SFML_LIBRARIES}")
 
#Добавляем цель
add_executable(${PROJECT_NAME} "Basic Guide.cpp")
 
#Добавляем библиотеки на линковку с целью
target_link_libraries(${PROJECT_NAME} ${MOTION_LIBRARY} ${SFML_LIBRARIES} ${SFML_DEPENDENCIES})
На всякий случай архив с CMakeLists.txt и Basic Guide.cpp.
motion_cmake.zip
1
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
15.10.2018, 15:40  [ТС]
Croessmah, вам нимб потолки дома не царапает? Просто огромное человеческое спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2018, 15:40
Помогаю со студенческими работами здесь

Подключение библиотеки
Здравствуйте уважаемые программисты Подскажите пожалуйста как правильно подключить внешнюю скомпилированную библиотеку к Qt Вот мой...

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

Подключение библиотеки
Читаю Макса Шлее(2007 год), там в программах подключается #include &lt;QtGui&gt; и все любые виджеты используется, а у мне каждый виджет вручную...

подключение библиотеки
доброго времени суток, при подключении библиотеки #pragma comment(lib, &quot;OpenGL.lib&quot;) (все это проделываю в visual c++) необходимо ли...

Подключение библиотеки
Пишу if (Button == mbLeft) Form1-&gt;Close(); Говорит Unit1.cpp(27): E2451 Undefined symbol 'Button' таже лажа с Key='*'...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru