- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是用 C++ 开发 Nodejs 插件的新手。
我有一个静态 c 库,我将其包含在我的插件中,需要该库来与自定义硬件通信,但该库的某些函数使用 math.h。因此,当我在 C 示例中进行编译时,我执行以下操作:gcc main.c libmackrnp6_0_2_fPIC.a -o test -lm
,没有问题,但是当我在 cpp 插件中包含此库时,我遇到了问题pow 函数。
如何使用 -lm 选项(与 gcc 等效)编译插件 sudo node-gyp configure build
?
绑定(bind).gyp
{
"targets": [
{
"target_name": "octotuner",
"sources": [
"params.cpp",
"headerv6.h"
],
"libraries": ["/home/nvidia/webrf/api/libmackrnp6_0_2_fPIC.a"],
"link_settings": {
"libraries": [
"-lm"
]
},
}
]
}
params.cpp
#include <node.h>
#include <iostream>
#include <stdio.h>
extern "C" {
#include "headerV6.h"
}
using namespace v8;
using namespace std;
void getParams(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
int status = 0, numplaca = 0;
unsigned char json[9999] = ""; //<-- the lib function needs this (I know)
unsigned char flagTuner = 0;
int timeOut = 20; //segundos
parametros(json, flagTuner, numplaca, timeOut, &status); // <-- this uses pow
std::string sJson(reinterpret_cast<char*>(json));
Local<String> retval = String::NewFromUtf8(isolate, sJson.c_str());
args.GetReturnValue().Set(retval);
}
void Initialize(Local<Object> exports) {
NODE_SET_METHOD(exports, "getRF", getParams);
}
NODE_MODULE(octotuner, Initialize);
teste.js
const rf = require('./build/Release/octotuner');
console.log(rf.getRF())
测试
sudo node teste.js
输出:
{
"Numero_da_Placa":0,
"Comando_OK":1,
"Tuner0":{
"Canal_Fisico":25,
"QUALIDADE_LA":"-",
"QUALIDADE_LB":"-",
"QUALIDADE_LC":"-",
"BER_LA":"-",
"BER_LB":"-",
"BER_LC":"-",
"Potencia":-1.95,
"SNR":3.9,
"Modo":"8K",
"Intervalo_de_Guarda":"1/8",
"Modulacao_LA":"QPSK",
"Taxa_do_Codigo_LA":"2/3",
"Entrelacamento_LA":400,
"Segmentos_LA":1,
"Modulacao_LB":"64-QAM",
"Taxa_do_Codigo_LB":"3/4",
"Entrelacamento_LB":200,
"Segmentos_LB":3,
"Modulacao_LC":"Error",
"Taxa_do_Codigo_LC":"Error",
"Entrelacamento_LC":"Error",
"Segmentos_LC":"Error"
}
}
使用相同库的C程序(不在插件中,仅用于测试):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "headerV6.h"
int main(int argc, char *argv[]){
int i = 0, status = 0, numplaca = 0;
char json[9999] = {0};
unsigned char flagTuner = 0;
int timeOut = 20; //segundos
parametros(json, flagTuner, numplaca, timeOut, &status);
printf("%s", json);
return 0;
}
编译: gcc params.c libmackrnp6_0_2_fPIC.a -o teste
编译失败(这就是为什么我认为该插件的问题在于它没有链接数学库)
(metadados.o): na função `recoverDataNum':
metadados.c:(.text+0x138): referência indefinida para `pow'
metadados.c:(.text+0x1d8): referência indefinida para `pow'
collect2: error: ld returned 1 exit status
编译: gcc params.c libmackrnp6_0_2_fPIC.a -o teste -lm
编译成功
测试:sudo ./teste
{
"Numero_da_Placa":0,
"Comando_OK":1,
"Tuner0":{
"Canal_Fisico":25,
"QUALIDADE_LA":100.0,
"QUALIDADE_LB":100.0,
"QUALIDADE_LC":"-",
"BER_LA":0.0000e+00,
"BER_LB":0.0000e+00,
"BER_LC":"-",
"Potencia":-19.50,
"SNR":37.9,
"Modo":"8K",
"Intervalo_de_Guarda":"1/8",
"Modulacao_LA":"QPSK",
"Taxa_do_Codigo_LA":"2/3",
"Entrelacamento_LA":400,
"Segmentos_LA":1,
"Modulacao_LB":"64-QAM",
"Taxa_do_Codigo_LB":"3/4",
"Entrelacamento_LB":200,
"Segmentos_LB":12,
"Modulacao_LC":"-",
"Taxa_do_Codigo_LC":"-",
"Entrelacamento_LC":"-",
"Segmentos_LC":"-"
}
}
最佳答案
Solved
我已经使用了以下binding.gyp
,并且我已经获得了第三部分库的新版本,并且它现在可以工作了!谢谢。
{
"targets": [
{
"target_name": "octotuner",
"sources": [
"params.cpp"
],
"include_dirs": [
"./so"
],
"link_settings": {
"libraries": ["/home/nvidia/webrf/api/so/libmackrnp6_0_2_fPIC.a","-lm"],
}
}
]
}
关于c++ - NodeJS : node-gyp compile with the equivalent gcc -lm option,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59849758/
我对 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 时,我在控制台中收
我是一名优秀的程序员,十分优秀!