问题描述
您好,我是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)
#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)
}
我不确定该怎么做,因为我以前从未见过这样的错误,并且在线上很少有关于如何处理它的文档。谢谢!
这是我的binding.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
,以避免在jsoncpp.dll
也存在的情况下出现问题。