我有一个非常简单的 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转到结构的定义——因此,它肯定是系统正常安装和定位的。我究竟做错了什么?