【问题标题】:gstreamer not found by CLion on Ubuntu 16.04 LTSCLion 在 Ubuntu 16.04 LTS 上找不到 gstreamer
【发布时间】:2017-03-01 12:30:58
【问题描述】:

我正在开展一个项目,该项目需要 gstreamer 通过 UPD 将网络摄像头馈送流式传输到另一台计算机。我整个早上都在尝试在我的 Ubuntu 16.04 上安装 gstreamer,最终我设法使用以下命令使其工作:

sudo apt-get install libgstreamer0.10-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 gstreamer0.10-tools gstreamer-tools gstreamer0.10-doc gstreamer0.10-x

我还在我的项目中修改了我的 cmake 文件,以尝试包含 gstreamer 库(请参阅 cmets):

cmake_minimum_required(VERSION 3.1.0)

PROJECT(gstreamer-test)

# paths
LINK_DIRECTORIES(/usr/local/lib)            # OpenCV
LINK_DIRECTORIES(/usr/include/glib-2.0)     #gstreamer
LINK_DIRECTORIES(/usr/include/gstreamer-0.10) 

# Build settings
SET(EXECUTABLE_OUTPUT_PATH build/bin)
SET(LIBRARY_OUTPUT_PATH build/lib)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY build)


# Compiler settings
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")


SET(OpenCV_LIBRARIES opencv_core opencv_highgui opencv_videoio -lopencv_calib3d opencv_imgproc -lopencv_imgcodecs opencv_ml opencv_objdetect opencv_features2d opencv_flann)


add_executable(gstreamer_test main.cpp)
TARGET_LINK_LIBRARIES(gstreamer_test ${OpenCV_LIBRARIES})

尽管如此,CLion 拒绝包含 gstreamer。当我尝试从他们的网站 (https://gstreamer.freedesktop.org/documentation/application-development/basics/helloworld.html) 构建教程“hello world”应用程序时,它失败了,因为 CLion 找不到包含的 gst/gst.h 和 glib.h 文件。

一些论坛建议使用 find_package 命令,但我什至不确定这个库的确切包名是什么,我只知道头文件的位置。这方面的文档似乎也很少。

有人知道如何在我的项目中正确包含 gstreamer 库吗?

【问题讨论】:

  • CLion 只调用cmake,为什么还要责怪它?您确定gst/gst.h 可以通过提供的路径找到吗?
  • 使用find_package模式
  • @user1056837 公平点,CLion 没办法。这是我缺乏cmake知识。但是,我确信路径 /usr/include/gstreamer-0.10/gst/gst.h 和 /usr/include/glib-2.0/glib.h 是正确的。
  • @fandyushin 我试过 find_package(libgstreamer0.10-dev) 但找不到。我也尝试输入“gstreamer”(以及 libgstreamer 的其他一些变体 - 名称),但这也不起作用。你知道我如何识别包名吗?

标签: c++ ubuntu cmake gstreamer clion


【解决方案1】:

试试find_package。您可以使用此模块 https://github.com/WebKit/webkit/blob/master/Source/cmake/FindGStreamer.cmake 并将其放入例如 ./cmake/ 中。比添加到您的 CMakeLists.txt

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/)

find_package(GStreamer)
if(GStreamer_FOUND)
  message(STATUS "FOUND!!")
  include_directories(${GSTREAMER_INCLUDE_DIRS})
endif()
...
target_link_libraries(gstreamer_test ${GSTREAMER_LIBRARIES})

我的 CMake 输出:

-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Checking for module 'gstreamer-1.0 >= '
--   Found gstreamer-1.0 , version 1.8.3
-- Checking for module 'gstreamer-base-1.0 >= '
--   Found gstreamer-base-1.0 , version 1.8.3
-- Checking for module 'gstreamer-app-1.0 >= '
--   
-- Checking for module 'gstreamer-audio-1.0 >= '

和CMakeCache中的变量:

//Path to a library.
GSTREAMER_LIBRARIES:FILEPATH=/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so

【讨论】:

  • 感谢您的代码。我将 FindGstreamer.cmake 放在正确的文件夹中,添加了代码并重新加载了 cmakefile。但是,尽管 cmake 找到了库,但 GSTREAMER_LIBRARIES 变量仍然“设置为未找到”。这是日志:--找到!! CMake 错误:此项目中使用了以下变量,但它们设置为 NOTFOUND。请设置它们或确保它们在 CMake 文件中正确设置和测试:GSTREAMER_LIBRARIES (ADVANCED) 由目录 /home/lorre851/CLionProjects/gstreamer-test 中的目标“gstreamer_test”链接
  • @LaurentLoots 这个模块使用 pkgconfig find_package(PkgConfig) 。你有这个包裹吗? apt search pkgconfig 如果没有 - 卸载并重试,或者您可以搜索更简单的模块而不使用 pkgconf。
  • 是的,pkg-config 已安装。 cmake 日志还显示了已安装的各种 gstreamer 模块,所以我猜它工作正常
  • @LaurentLoots 很好!如果您坚持使用 clion 和 buildin-cmake - 尝试 File-> Invalidate Cache-> Invalidate 并重新启动。它帮助了我很多次。
  • @LaurentLoots 它正在寻找 1.0 版,但你有 0.10。在 FindGStreamer.cmake 文件中更改版本。或者安装 libgstreamer1.0
【解决方案2】:

只需使用INCLUDE_DIRECTORIES 而不是LINK_DIRECTORIES

  • 第一个代表-I 编译器选项(在哪里可以找到头文件)。
  • 第二个 - -L(在哪里可以找到库)。

如你所见,这是不同的事情。

【讨论】:

  • 我明白了。我使用了 INCLUDE_DIRECTORIES,现在 CLion 不再阻塞 #include 语句了。但是,在编译时,会生成很多“未定义引用”错误,并且构建失败。
猜你喜欢
  • 1970-01-01
  • 2018-04-25
  • 2017-04-13
  • 2016-08-29
  • 2017-06-26
  • 2019-03-10
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
相关资源
最近更新 更多