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

Edw*_*ard 4 cmake gstreamer

我正在尝试编写一个 CMAKE 文件来编译此处找到的代码。

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

undefined reference to `gst_video_overlay_get_type'
undefined reference to `gst_video_overlay_set_window_handle'
Run Code Online (Sandbox Code Playgroud)

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})
Run Code Online (Sandbox Code Playgroud)

其他 SO 帖子建议了gstreamer-video-1.0我相信我所在的链接:

target_link_libraries(gstreamer ${GST_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Fin*_*nis 7

这就是它与现代基于目标的 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
)
Run Code Online (Sandbox Code Playgroud)

请注意缺少target_include_directories. 导入的目标包含所有这些信息,包括链接器标志、编译器标志、库路径、包含路径等。通过链接到导入的目标target_link_libraries会将所有内容PUBLICINTERFACE属性从其中拉入my-gstreamer-app目标。


小智 5

你可以试试:

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)
Run Code Online (Sandbox Code Playgroud)

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