NodeJS C++ Addon 中的 Postgres 驱动程序
Postgres driver in NodeJS C++ Addon
我目前正在使用抽象层 Nan 为 NodeJS 开发 C++ 插件。我想从这个插件发出 PostgreSQL 请求。但是我收到以下错误:
module.js:597
return process.dlopen(module, path._makeLong(filename));
^
Error: ....cpp/build/Release/MyModule.node: undefined symbol: _ZTVN4pqxx14connect_directE
at Error (native)
at Object.Module._extensions..node (module.js:597:18)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (...cpp/test.js:1:77)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
这是我的binding.gyp:
{
"targets": [
{
"target_name": "MyModule",
"sources": [ "Main.cpp"],
"include_dirs": [
"<!(node -e \"require('nan')\")"
],
"cflags": [
"-fexceptions",
"-lpq",
"-lpqxx"
],
"cflags_cc": [
"-fexceptions",
"-lpq",
"-lpqxx"
]
}
]
}
还有我的Main.cpp文件
#include <nan.h>
#include <iostream>
#include <pqxx/pqxx>
using namespace Nan;
using namespace v8;
using namespace std;
using namespace pqxx;
NAN_METHOD(MyModule) {
// Database connection
connection C(
"dbname = ... \
user = ... \
password = ... \
hostaddr = 127.0.0.1 \
port = 5432");
}
NAN_MODULE_INIT(Init) {
Nan::Set(target, New<String>("MyModule").ToLocalChecked(),
GetFunction(New<FunctionTemplate>(MyModule)).ToLocalChecked());
}
NODE_MODULE(parser, Init)
我被这个错误困住了,我没有在网上找到任何解决方案。如果有人能提供帮助,我会很高兴!
dlopen
尝试加载共享库。然而,这个库遗漏了一个符号,_ZTVN4pqxx14connect_directE。解码:
$ c++filt _ZTVN4pqxx14connect_directE`
vtable for pqxx::connect_direct
因此,您需要 link 一个库到您的库(插件),其中有这个符号。 (postgres 驱动程序?)
确保您的构建系统不会延迟 linking,并且当您 运行 ldd your_addon
时会出现该库。如果驱动安装到非标准目录,可以尝试设置LD_LIBRARY_PATH
作为临时解决方案。
我目前正在使用抽象层 Nan 为 NodeJS 开发 C++ 插件。我想从这个插件发出 PostgreSQL 请求。但是我收到以下错误:
module.js:597
return process.dlopen(module, path._makeLong(filename));
^
Error: ....cpp/build/Release/MyModule.node: undefined symbol: _ZTVN4pqxx14connect_directE
at Error (native)
at Object.Module._extensions..node (module.js:597:18)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (...cpp/test.js:1:77)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
这是我的binding.gyp:
{
"targets": [
{
"target_name": "MyModule",
"sources": [ "Main.cpp"],
"include_dirs": [
"<!(node -e \"require('nan')\")"
],
"cflags": [
"-fexceptions",
"-lpq",
"-lpqxx"
],
"cflags_cc": [
"-fexceptions",
"-lpq",
"-lpqxx"
]
}
]
}
还有我的Main.cpp文件
#include <nan.h>
#include <iostream>
#include <pqxx/pqxx>
using namespace Nan;
using namespace v8;
using namespace std;
using namespace pqxx;
NAN_METHOD(MyModule) {
// Database connection
connection C(
"dbname = ... \
user = ... \
password = ... \
hostaddr = 127.0.0.1 \
port = 5432");
}
NAN_MODULE_INIT(Init) {
Nan::Set(target, New<String>("MyModule").ToLocalChecked(),
GetFunction(New<FunctionTemplate>(MyModule)).ToLocalChecked());
}
NODE_MODULE(parser, Init)
我被这个错误困住了,我没有在网上找到任何解决方案。如果有人能提供帮助,我会很高兴!
dlopen
尝试加载共享库。然而,这个库遗漏了一个符号,_ZTVN4pqxx14connect_directE。解码:
$ c++filt _ZTVN4pqxx14connect_directE`
vtable for pqxx::connect_direct
因此,您需要 link 一个库到您的库(插件),其中有这个符号。 (postgres 驱动程序?)
确保您的构建系统不会延迟 linking,并且当您 运行 ldd your_addon
时会出现该库。如果驱动安装到非标准目录,可以尝试设置LD_LIBRARY_PATH
作为临时解决方案。