您好,我是 C++ 新手,一直在使用 node-gyp 为我的一个程序构建一个插件。但是,当我尝试构建插件时遇到此错误:
watercpp.obj : error LNK2001: unresolved external symbol "class std::basic_istr
eam<char,struct std::char_traits<char> > & __cdecl Json::operator>>(class std::
basic_istream<char,struct std::char_traits<char> > &,class Json::Value &)" (??5
Json@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@std@@AEAV12@AEAVValue@0@@Z)
我认为这与从 JSON 访问信息的引用错误有关。这就是我的代码的样子:
#include "node.h"
#include "node_buffer.h"
#include "v8.h"
#include <value.h>
#include <fstream>
#include <iostream>
#include <string>
#include <json/json.h>
#include <vector>
using namespace v8;
using namespace std;
namespace water{
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Number;
using v8::Value;
using v8::Array;
void water(const FunctionCallbackInfo<Value> &args)
{
Json::Value waterjson;
std::ifstream people_file("waterjson.json", std::ifstream::binary);
people_file >> waterjson;
Local<Array> a;
Local<Array> b;
if(args[0]->IsArray())
{
a = args[0].As<Array>();
b = args[1].As<Array>();
}
int total=0;
for(std::size_t i=0; i<a->Length(); i++)
{
v8::Isolate* isolate = args.GetIsolate();
v8::String::Utf8Value atr(isolate, a->Get(i));
std::string cppStr(*atr);
int c = waterjson[cppStr]["content"].asInt();
int s = waterjson[cppStr]["serving"].asInt();
int m = s/100;
int amount = c*m;
v8::String::Utf8Value btr(isolate, b->Get(i));
std::string cppNum(*btr);
int num = stoi(cppNum);
total+=(amount*num);
}
args.GetReturnValue().Set(total);
}
void Initialize(Local<Object> exports)
{
NODE_SET_METHOD(exports, "water", water);
}
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
}
我不确定该怎么做,因为我以前从未见过这样的错误,而且网上几乎没有关于如何处理它的文档。谢谢!
这是我的绑定(bind).gyp:
{
"targets":[
{
"target_name": "water",
"sources": ["watercpp.cpp"],
"include_dirs": [
"./vcpkg/installed/x86-windows/include",
"./vcpkg/buildtrees/jsoncpp/src/1.9.2-d01d7f5c9b.clean/include/json",
],
"library_dirs":[
"./vcpkg/buildtrees/jsoncpp/x86-windows-dbg/src/lib_json",
"./vcpkg/installed/x86-windows/lib", "./vcpkg/packages/jsoncpp_x86-windows/lib",
],
"libraries":[
"-ljsoncpp.lib", "<(module_root_dir)/vcpkg/buildtrees/jsoncpp/x86-windows-dbg/src/lib_json",
"<(module_root_dir)/vcpkg/installed/x86-windows/lib", "<(module_root_dir)/vcpkg/packages/jsoncpp_x86-windows/lib",
],
},
]
}
最佳答案
您需要添加jsoncpp
库到 binding.gyp
中的链接阶段:
"libraries": [
"-L.", "-ljsoncpp"
],
-
-L<libdir>
- 在其中查找库的目录。替换.
如果实际路径不在当前目录中,则使用实际路径。 -
-l<library>
- 要链接的实际库。您可能需要指定完整的静态库名称jsoncpp.lib
相反,以避免出现问题 ifjsoncpp.dll
也存在。
关于c++ - 错误LNK2001 : unresolved external symbol in C++ with Node-Gyp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63383329/