Cmake 如何在ROS包中使用/链接介子构建Gstreamer?

Cmake 如何在ROS包中使用/链接介子构建Gstreamer?,cmake,linker,gstreamer,ros,pkg-config,Cmake,Linker,Gstreamer,Ros,Pkg Config,为了使用最新版本,我使用以下命令构建了新版本 meson --prefix=/media/jai/Entertainment/Software/gstreamer/gst-build-installed --reconfigure build/ ninja -C build/ meson install -C build/ 现在我有了这个目录 它也有pkg配置 要链接此Gstreamer,我必须在Cmakelist.txt和package.xml中进行哪些更改? 我尝试了以下更改。

为了使用最新版本,我使用以下命令构建了新版本

meson --prefix=/media/jai/Entertainment/Software/gstreamer/gst-build-installed --reconfigure build/  
ninja -C build/  
meson install -C build/
现在我有了这个目录

它也有pkg配置

要链接此Gstreamer,我必须在Cmakelist.txt和package.xml中进行哪些更改?

我尝试了以下更改。但到现在为止运气都不好

CMakeLists.txt

package.xml


我认为它可能能够访问include文件,但不能访问LIBS。

我认为在设置PKG\u CONFIG\u路径时,您需要使用(冒号)来分割路径,并注意引号:

SET(ENV{PKG_CONFIG_PATH} "/media/jai/Entertainment/Software/gstreamer/gst-build-installed/lib/x86_64-linux-gnu/pkgconfig:$ENV{PKG_CONFIG_PATH}")
您还可以通过以下方式再次检查gstreamer版本:

pkg_get_variable(GST_VERSION gstreamer-1.0 version)
message(STATUS "Gstreamer version:${GST_VERSION}")
请注意,您的应用程序应该能够在运行时找到您构建的gstreamer库。为了实现这一点,应将其安装到已知位置,路径为LD\u LIBRARY\u。如@Florian所述,出于开发目的,以及使用运行时链接器config/etc/ld.so.config,也可以对其进行更新

PS

我注意到gstapsink.h,不知道您的CmakeList中是否缺少另一个gst包,例如gstreamer-app-1.0。检查cmake宏

Jai编辑


谢谢你的回复
SET(ENV{PKG_CONFIG_PATH})/media/jai/Entertainment/Software/gstreamer/gst build installed/lib/x86_64-linux-gnu/pkgconfig:$ENV{PKG_CONFIG_PATH}”)
SET(ENV{PKG_CONFIG_PATH})/media/jai/Entertainment/Software/gstreamer/gstreamer/gst/gst build gst build installed/lib/x86_64-linux-gnu/PKG配置路径}。这两个结果与
pkg\u get\u变量(GST\u版本gstreamer-1.0版本)
-1.17.0.1(新gstreamer)的结果相同。在我的IDE中,如果我在
#include
行附近徘徊,它会显示新的gstreamer头路径,但gst\u version\u string()在运行时的执行过程中仍然会给出旧的gstreamer版本。这和建筑不同。尝试使用
LD\u LIBRARY\u PATH
指向您的“新”GStreamer库。然后应该加载它们,而不是系统范围内可用的。我在
CMakeLists.txt
中编辑了
LD\u库路径。仍然没有链接新的gstreamer(1.17)。我用完整的
CMakeLists.txt
Package.xml
&
main.cpp
更新了我的问题。没错,Florian说的是运行时链接,不是构建时间,所以这不是关于cmake文件。当你的应用程序开始运行时,应该能够找到正确的*.so(对应于构建它所依据的标题)。@FlorianZwoch,谢谢。I
gedit.bashrc
并添加了
export LD_LIBRARY_PATH=/media/jai/Entertainment/Software/gstreamer/gst build installed/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
。它与新的gstreamer连接。
#include "ros/ros.h"
#include <sensor_msgs/CompressedImage.h>
#include "thread"
#include <boost/thread.hpp>
extern "C"{
#include <gst/gst.h>
#include <gst/app/gstappsink.h>
}
int main(int argc, char **argv)
{
    ros::init(argc, argv, "gstreamer");
    gst_init(&argc, &argv);
    g_print ("**\nGstreamer version: %s\n**\n", gst_version_string ());

    ros::spin();
}
************************************
Gstreamer version: GStreamer 1.8.3
************************************
libva info: VA-API version 0.39.4
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
SET(ENV{PKG_CONFIG_PATH} "/media/jai/Entertainment/Software/gstreamer/gst-build-installed/lib/x86_64-linux-gnu/pkgconfig:$ENV{PKG_CONFIG_PATH}")
pkg_get_variable(GST_VERSION gstreamer-1.0 version)
message(STATUS "Gstreamer version:${GST_VERSION}")
gedit .bashrc

export LD_LIBRARY_PATH=/media/jai/Entertainment/Software/gstreamer/gst-build-installed/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH