如何编写一个成功链接gstreamer的CMAKE文件基本教程5



我正在尝试编写一个CMAKE文件,该文件将编译此处的代码。

我当前的CMAKE文件如下所示,并且已成功编译并链接了以前的教程。它也编译了这个,但当链接时,我得到了以下错误:

undefined reference to `gst_video_overlay_get_type'
undefined reference to `gst_video_overlay_set_window_handle'

CMAKE文件如下所示:

cmake_minimum_required(VERSION 3.18)
project(gstreamer)
set(CMAKE_CXX_STANDARD 20)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
pkg_search_module(GST REQUIRED gstreamer-1.0>=1.4
gstreamer-sdp-1.0>=1.4
gstreamer-app-1.0>=1.4
gstreamer-video-1.0>=1.4
)

add_executable(gstreamer main.cpp)
target_include_directories(gstreamer PRIVATE ${GTK3_INCLUDE_DIRS} ${GST_INCLUDE_DIRS})
target_link_libraries(gstreamer ${GTK3_LIBRARIES} ${GST_LIBRARIES})

其他SO帖子建议链接gstreamer-video-1.0,我相信我在其中:

target_link_libraries(gstreamer ${GST_LIBRARIES})

如果我误解了PkgConfig的工作原理,我将非常感谢您的解释。

感谢

这就是它与现代基于目标的CMake:的工作方式

cmake_minimum_required(VERSION 3.15.3)
project(gstreamer)
set(CMAKE_CXX_STANDARD 20)
find_package(PkgConfig REQUIRED)
pkg_check_modules(gtk3 REQUIRED IMPORTED_TARGET gtk+-3.0)
pkg_search_module(gstreamer REQUIRED IMPORTED_TARGET gstreamer-1.0>=1.4)
pkg_search_module(gstreamer-sdp REQUIRED IMPORTED_TARGET gstreamer-sdp-1.0>=1.4)
pkg_search_module(gstreamer-app REQUIRED IMPORTED_TARGET gstreamer-app-1.0>=1.4)
pkg_search_module(gstreamer-video REQUIRED IMPORTED_TARGET gstreamer-video-1.0>=1.4)
add_executable(my-gstreamer-app main.cpp)
target_link_libraries(my-gstreamer-app
PkgConfig::gtk3
PkgConfig::gstreamer
PkgConfig::gstreamer-sdp
PkgConfig::gstreamer-app
PkgConfig::gstreamer-video
)

注意没有target_include_directories。导入的目标包含所有这些信息,包括链接器标志、编译器标志、库路径、包含路径等。通过target_link_libraries链接到导入的目标将把它们的所有PUBLICINTERFACE属性拉入my-gstreamer-app目标。

您可以尝试:

find_package(PkgConfig) 
pkg_search_module(GLIB REQUIRED glib-2.0) 
pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0)
pkg_check_modules(GST_APP REQUIRED gstreamer-app-1.0)
pkg_check_modules(GST_VIDEO REQUIRED gstreamer-video-1.0)

target_link_libraries(${PROJECT_NAME} ${GST_APP_LIBRARIES} ${GST_VIDEO_LIBRARIES})

最新更新