0

У меня есть очень простой проект с GStreamer:

#include <gst/gst.h>

using namespace std;

int main(){ GstElement pipeline = nullptr; GstBus bus = nullptr; GstMessage *msg = nullptr;

// gstreamer initialization
gst_init(nullptr, nullptr);

}

Я хочу собрать его с таким CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)

project(Mgm) find_package(PkgConfig)

set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True)

pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0)

#including GStreamer header files directory include_directories( ${GLIB_INCLUDE_DIRS} ${GSTREAMER_INCLUDE_DIRS} )

#linking GStreamer library directory link_directories( ${GLIB_LIBRARY_DIRS} ${GSTREAMER_LIBRARY_DIRS} )

add_executable(mgm src/main.cpp)

Проблема в том, что при сборке я получаю ошибку линковщика:

[keddad@priest mgm]$ cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/keddad/Documents/mgm
[keddad@priest mgm]$ make
[ 50%] Linking CXX executable mgm
/usr/bin/ld: CMakeFiles/mgm.dir/src/main.cpp.o: in function `main':
main.cpp:(.text+0x2b): undefined reference to `gst_init'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/mgm.dir/build.make:103: mgm] Error 1
make[1]: *** [CMakeFiles/Makefile2:95: CMakeFiles/mgm.dir/all] Error 2
make: *** [Makefile:103: all] Error 2

В системе установлен пакет gstreamer, так что библиотеки для линковки, кажется, должны присутствовать. При этом в IDE (VS Code) я мог я вижу сигнатуры функций и могу, например, перейти к определению структуры из gst - следственно, он точно нормально установлен и находится системой. Что я делаю не так?

keddad
  • 270

1 Answers1

1

Собственно просто не хватает указания, что цель надо линковать с указанными библиотеками:

target_link_libraries(mgm ${GSTREAMER_LIBRARIES})
Fat-Zer
  • 23,138