- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试在我的 Node 插件中使用 gstreamer 框架。我的 binding.gyp 有以下内容,但是当我运行构建命令时,控制台指出未找到 header 。当我在 node-gyp 之外编译我的 gstreamer 文件时,它编译成功。有人看到我的绑定(bind)文件有问题吗?
控制台
hello.cc3:25: fatal error: gstreamermm.h: No such file or directory
绑定(bind).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`
最佳答案
Does anyone see something wrong with my binding file?
是的:
"libraries": [
"-lgstreamer-1.0", "-L/usr/include/gstreamer-1.0/gst/"
],
"libraries"
元素,在 binding.gyp
应包括 -l
中指定的库或者您要链接的绝对文件名形式。
-lgstreamer-1.0
是其中之一。 -L/usr/inlcude/gstreamer-1.0/gst/
不是。它是一个链接器选项,将指示链接器搜索对于 -l
中指定的库表格在目录 /usr/include/gstreamer-1.0/gst/
.
那是指定一个库搜索目录,所以如果需要的话,你应该在"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
. (在你的系统上它可能与我的不同):
绑定(bind).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"
],
"libraries": [
"-lgstreamer-1.0",
"-lgobject-2.0",
"-lglib-2.0"
],
"sources": [ "hello.cc" ]
}
]
}
(我们忘记了 -pthread
发出的 pkg-config
选项吗?没有。 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 '-I',
gyp info spawn args '/usr/share/node-gyp/addon.gypi',
gyp info spawn args '-I',
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
进入include_dirs
你的 list binding-gyp
.可能你只是从我的示例中复制了那些。我的例子,给出目录:
-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
开发包有缺陷 gstreamer-1.0.pc
文件提供不正确 pkg-config
信息。要解决这个问题,请让您的发行版的包管理器向您展示开发包真正安装的位置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
)到 include_dirs
你的binding.gyp
.
关于javascript - node-gyp - 找不到库头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46027121/
我对 gyp 完全陌生,所以请原谅我对这个主题的任何无知——我正在尝试将一个使用 gyp 的项目合并到由 make 生成的更大环境中。有问题的 .gyp 文件有一个用于 C 文件的 -L 选项,它指向
我是第一次使用gyp,我已经阅读了它的在线帮助。我已经在命令行上的导出变量中使用 CC 选项设置了编译器(在 Windows 中使用 cygwin)。因此,所有文件都可以正确编译。现在,我想使用不同的
当node-gyp本身安装在/usr/bin/node-gyp中时,为什么它在绝对路径中寻找node-gyp.js?如果我这样做 find /usr -name node-gyp.js 结果是 /us
是否可以定义一个 GYP 变量,其值取决于构建配置的选择? 最佳答案 只需使用变量 $(BUILDTYPE)或 $(ConfigurationName) . 关于node-gyp - 基于构建配置的
在 Windows 10 v1903 上运行 npm 6.11.3、node-gyp 5.0.3、VS2019,出现此错误: 找不到模块 %AppData%\npm\node_modules\node
我在写 binding.gyp我的新 node.js 模块的文件。我的所有源文件都在 src/ 下子目录。我想在构建模块时使用所有这些。我不想每次添加新的 cpp 文件时都修改 binding.gyp
我希望看到在构建节点绑定(bind)时使用编译器和链接器标志。我怎样才能让node-gyp build在详细模式下运行来实现这一点。 (类似于 cmake 的 make VERBOSE=1) 最佳答案
node-gyp --help说: Usage: node-gyp [options] where is one of: - build - Invokes `make` and builds
我正在开发一个大node.js项目还包括几个 native 库。 为了在 JavaScript 中使用这些库,我使用 node-gyp 将它们编译为 Node 插件 (.node)。 。 我想运行no
我正在使用 node-gyp,我想在我的 binding.gyp 中使用环境变量的值文件。 这是困难的方式(列表上下文): '
我想用/MD 标志(多线程 DLL)编译一个 node.js 模块。 在 binding.gyp 的 cflags 选项中包含“/MD”不起作用。 最佳答案 在玩了 binding.gyp 之后 -
我正在尝试启动有关 Node C/C++ 附加组件的内容。 node-gyp 命令出错 我已经安装了vs2019,我的命令是 node-gyp configure --msvs_version=201
我整天都在做这件事,并尝试了很多不同的事情: 卸载 Node 并安装最新版本 使用 --msvs_version= 标志设置为 2010, 2011, 2012, 2013, 2015 删除 .nod
我正在尝试为 Node js 构建 hello world C++ 插件。 Node.js 和 Node-gyp 似乎都已成功安装到 Redhat Linux 中。但是,当我运行“node-gyp c
我在 ubuntu 14.04 和 node 8.0.0 下使用 NPM。 我已将我的 npm 从 5.2.0 升级到 5.6.0 但是在那之后所有的 npm 命令都失败了,说明有问题: node-g
我在 CentOS 6.8 上进行 node-gyp 重建时遇到错误: File "/usr/local/lib/node_modules/node-gyp/gyp/pylib/gyp/input.p
我正在为 nodejs 编写一个 C 插件,我可以毫无问题地使用 node-waf 编译和创建我的模块。但是我需要使用 node-gyp,当我尝试使用 node-gyp build 构建模块时,出现以
我有一个简单的 binding.gyp 文件来构建我的 node.js 扩展。我想改变库“mylib”的链接方法,静态链接而不是使用共享库。 { "targets": [ {
我正在尝试使用 npm 安装我的依赖项,但是当安装 firebase 时安装失败。我尝试使用 npm i firebase 单独安装 firebase但它不起作用。我删除了 node_modules
我正在创建 Angular 项目并使用 Express.js 作为后端,使用 SQLite3 作为数据库。当我通过命令 npm install sqlite3 安装 sqlite3 时,我在控制台中收
我是一名优秀的程序员,十分优秀!