我正在尝试在我的节点插件中使用gstreamer框架.我有以下内容到我的binding.gyp,但是当我运行build命令时,控制台声明找不到标题.当我在node-gyp之外编译我的gstreamer文件时,它会成功编译.有没有人看到我的绑定文件有问题?

安慰

hello.cc3:25: Fatal error: gstreamermm.h: No such file or directory

binding.gyp

{
  "targets": [
    {
      "target_name": "addon","libraries": [
            "-lgstreamer-1.0","-L/usr/inlcude/gstreamer-1.0/gst/"
          ],"sources": [ "hello.cc" ]
    }
  ]
}

编译命令正常工作,我正在尝试运行

g++ main.c -o main `pkg-config --cflags --libs gstreamer-1.0`

更新:
关注@Mike Kinghan binding.gyp

解决方法

Does anyone see something wrong with my binding file?

是:

"libraries": [
            "-lgstreamer-1.0","-L/usr/include/gstreamer-1.0/gst/"
          ],

binding.gyp中的“libraries”元素应包含在-l或中指定的库
绝对文件名表单,您要链接.

-lgstreamer-1.0就是其中之一. -L / USR / inlcude / gstreamer的-1.0 / GST /
不是.它是一个链接器选项,用于指示链接器进行搜索
对于在/usr/include/gstreamer-1.0/gst/目录中以-l形式指定的库.

那是指定一个库搜索目录,所以如果需要,你应该这样说
“library_dirs”元素:

"library_dirs": [
  "/usr/inlcude/gstreamer-1.0/gst/",]

但是你不需要它,因为/usr/inlcude/gstreamer-1.0/gst/中没有库.
/usr/include下的所有文件都是C或C头文件,而不是库.图书馆
安装在/ lib,/usr/lib或/usr/local / lib下.

你说你可以成功编译一个程序:

g++ main.c -o main `pkg-config --cflags --libs gstreamer-1.0`

这是有效的,因为你可能知道,

pkg-config --cflags --libs gstreamer-1.0

输出构建依赖的目标所需的编译器和链接器选项
gstreamer的-1.0

我们来看一下:

$pkg-config --cflags --libs gstreamer-1.0
-pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 \
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
-lgstreamer-1.0 -lgobject-2.0 -lglib-2.0

然后让我们使用该信息来编写binding.gyp. (在您的系统上它可能与我的不同):

binding.gyp

{
    "targets": [
    {
        "target_name": "addon","include_dirs": [
            "/usr/include/gstreamer-1.0","/usr/include/glib-2.0","/usr/lib/x86_64-linux-gnu/glib-2.0/include"
        ],"-lgobject-2.0","-lglib-2.0"
        ],"sources": [ "hello.cc" ]
    }
  ]
}

(我们忘记了pkg-config发出的-pthread选项吗?没有node-gyp传递
它默认是编译器和链接器)

使用此binding.gyp,您的构建应该看起来像我的:

$node-gyp configure build
gyp info it worked if it ends with ok
gyp info using node-gyp@3.4.0
gyp info using node@4.7.2 | linux | x64
gyp info spawn /usr/bin/python2
gyp info spawn args [ '/usr/share/node-gyp/gyp/gyp_main.py',gyp info spawn args   'binding.gyp',gyp info spawn args   '-f',gyp info spawn args   'make',gyp info spawn args   '-I',gyp info spawn args   '/home/imk/develop/so/scrap/build/config.gypi',gyp info spawn args   '/usr/share/node-gyp/addon.gypi',gyp info spawn args   '/usr/include/nodejs/common.gypi',gyp info spawn args   '-Dlibrary=shared_library',gyp info spawn args   '-Dvisibility=default',gyp info spawn args   '-Dnode_root_dir=/usr/include/nodejs',gyp info spawn args   '-Dnode_gyp_dir=/usr/share/node-gyp',gyp info spawn args   '-Dnode_lib_file=node.lib',gyp info spawn args   '-Dmodule_root_dir=/home/imk/develop/so/scrap',gyp info spawn args   '--depth=.',gyp info spawn args   '--no-parallel',gyp info spawn args   '--generator-output',gyp info spawn args   'build',gyp info spawn args   '-Goutput_dir=.' ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release','-C','build' ]
make: Entering directory '/home/imk/develop/so/scrap/build'
  CXX(target) Release/obj.target/addon/hello.o
  SOLINK_MODULE(target) Release/obj.target/addon.node
  copY Release/addon.node
make: Leaving directory '/home/imk/develop/so/scrap/build'
gyp info ok

另请注意,pkg-config会告诉您正确的编译器包含路径
找到gstreamer-1.0头文件是:

/usr/include/gstreamer-1.0

不:

/usr/incude/gstreamer-1.0/gst/

我们在binding.gyp中遵循了这个建议.因此
在您的源代码中,您将编写,例如

#include <gst/gst.h>

并不是:

#include <gst.h>

后来

现在你的编译器找不到< gst / gstconfig.h>

一个可能的原因是你没有忠实地复制
为您的系统报告的必要包含目录:

pkg-config --cflags gstreamer-1.0

进入binding-gyp的include_dirs列表.可能是你
刚从我的例子中复制了那些.我的例子,给出目录:

-I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 \
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include

在Ubuntu 17.04上运行,实际上是gst / gstconfig.h
安装在/usr/include/gstreamer-1.0中.但在Ubuntu 16.04上,
例如:-

$pkg-config --cflags gstreamer-1.0
-pthread -I/usr/include/gstreamer-1.0 \
-I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 \
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include

我们得到额外的包含目录:

/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include

确实安装了gst / gstconfig.h.检查您是否正在使用
pkg-config在您的系统上报告的正确包含目录
必要时纠正你的binding.gyp.

如果你使用正确的pkg-config结果,那么它会显示你的
gstreamer-1.0 dev软件包有一个有缺陷的gstreamer-1.0.pc文件提供错误
pkg-config信息.要解决这个问题,请让发行包的经理向您展示
dev包真正安装在哪里gst / gstconfig.h.例如.对于Ubuntu 16.04:

$dpkg -L libgstreamer1.0-dev | grep gst/gstconfig
/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include/gst/gstconfig.h

然后添加所需的路径前缀(例如/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include)到binding.gyp的include_dirs.

javascript – node-gyp – 找不到库头的更多相关文章

  1. ios中的.dylib和.a lib有什么区别?

    我知道Objectivec中的编译和运行时是什么,但是我想知道是什么画了这两个库之间的界限?他们的目的是什么,除了陈述一个是静态的而另一个是动态的?我们何时需要一个而不是另一个?

  2. xamarin.ios – ShareKit与MonoTouch如何?

    有人可以验证ShareKit实际上是否可用于MonoTouch并指导我完成使其工作所需的步骤?解决方法您首先从getsharekit.com下载还是使用ShareKit2.0?

  3. ios8 – iOS 8上的ptrace

    我试图在ptrace上调用一个像thisptrace一样的函数;但是当我尝试使用#include导入它时,Xcode会给我一个错误’sys/ptrace.h’文件找不到.我错过了什么,我是否需要导入一个库,或者这在iOS上根本不可用?

  4. ios – iPhone崩溃日志不能正确地符号化并且是双重间隔的

    任何建议超过欢迎.谢谢.解决方法当这件事发生在我身上时,它只是我通过电子邮件收到的日志.如果我记得,至少有一些是在.msg文件中,我不得不把它们拿出来.它可能是Exchange编码更改.如果你显示不可见的字符,你可能会看到每个字符之间的东西.您可以找到并替换它们以删除它们或更改编辑器中的编码.

  5. ios – Xcode 7 beta 2:LaunchScreen.storyboard无法打开文档

    我在两个不同的Mac(iMac和MacBookpro)上收到这个错误.不知道为什么人们不能再现它,但我需要一些帮助.在运行XX优胜美地10.10.4的Mac上运行Xcode7beta2(15六月’15).甚至无法编译和运行我的项目..我从创建菜单创建了一个视图应用程序项目,就是这样.编辑:我试图删除并重新添加storyboard文件(也可以打开Main.storyboard插件),我仍然得到相同的

  6. ios – 为具有多个目标和不同平台的项目编写Podfile

    如何让CocoaPods成功整合到我的项目和iOS/Mac目标?我已经阅读了Podfile文档,但发现它在这方面缺乏.解决方法得到它了!从我的每个目标和运行的pod安装中删除libPods-xxxx.a文件,再次执行了我的目标集成.

  7. 在编译时编译Xcode中的C类错误:stl vector

    我有一个C类,用gcc和可视化工作室中的寡妇在linux上编译.boid.h:并在boid.cpp中:但是,当我在Xcode中编译此代码时,我收到以下错误:有任何想法吗?我以为你可以使用C/C++代码并在Xcode中编译没有问题?.m文件被视为具有Objective-C扩展名的.c文件..mm文件被视为具有Objective-C扩展名的.cpp文件,那么它被称为Objective-C只需将.m文件重命名为.mm,右键单击或按住Ctrl键并在Xcode中的文件中选择重命名.

  8. iOS中的CocoaPods是什么?

    任何人都可以详细说明iOS开发中的CocoaPods.我似乎无法理解它们是什么.提前致谢.解决方法CocoaPods是我在最近的iOS应用程序开发中发现的最好的东西之一.我用它来获取最新的Github开源项目作为框架和lib到我的项目中.最好的部分是它将自动管理依赖lib,因此无需拖放文件并下载文件夹blaablaaa只需一个简单的代码’podinstall即可!

  9. 如何从Haxe创建iOS-和OSX-库并在本机应用程序中使用它?

    我有一个在Haxe上编写自己的协议,数据结构和逻辑的跨平台实现.如何在iOS和OSX的企业应用程序中构建和使用它?

  10. Swift调用C语言自建函数库的方法

    本程序示范了如何用Swift调用自定义C语言模块的方法。简介示范程序中有一个C语言的源程序CSwift.C和一个头文件CSwift.h,我们的目标是构造一个CSwift的函数库,能够让swift源程序执行CSwift程序中的函数。快速上手本程序需要Swift3.0以上版本。下载、编译和测试源程序采用C语言写成,测试程序则是Swift语言编写。因此如果通过测试,则恭喜您,已经成功实现了Swift语言调用C语言的整个过程。这种做法主要是为了能够在同一个项目中用Swift去测试C语言的模块。

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部