我正在尝试编写一个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})
其他这样的帖子建议将我所处的gstreamer-video-1.0
链接起来:
target_link_libraries(gstreamer ${GST_LIBRARIES})
如果我误解了PkgConfig的工作原理,我很想得到一个解释。
谢谢
发布于 2020-10-28 21:33:51
你可以试试:
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})
发布于 2022-10-12 07:47:47
这就是它与基于现代目标的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
链接到导入的目标将将所有PUBLIC
和INTERFACE
属性从它们中提取到my-gstreamer-app
目标中。
https://stackoverflow.com/questions/64078308
复制相似问题