У меня есть очень простой проект с 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 - следственно, он точно нормально установлен и находится системой. Что я делаю не так?