puerts / backend-nodejs

build libnode for iOS, Android, Macos, Windows, Linux
MIT License
67 stars 24 forks source link

node-20.x静态库vs2022下编译后的使用问题 #12

Open trising opened 2 months ago

trising commented 2 months ago

系统:win11 nodejs:20.x 编译命令:.\vcbuild.bat debug nonpm static openssl-no-asm vs2022 dll 问题描述: 静态库libnode编译成功,然后新建项目将test\embedding\embedtest.cc的代码复制到vs新建的其他项目运行结果报错: 错误信息: 微信图片_20240708142924

trising commented 2 months ago

c++新手求问,不胜感激

trising commented 2 months ago

1>main.obj : error LNK2019: 无法解析的外部符号 "public: void cdecl node::EmbedderSnapshotData::DeleteSnapshotData::operator()(class node::EmbedderSnapshotData const *)const " (??RDeleteSnapshotData@EmbedderSnapshotData@node@@QEBAXPEBV12@@Z),函数 "public: cdecl std::unique_ptr<class node::EmbedderSnapshotData const ,struct node::EmbedderSnapshotData::DeleteSnapshotData>::~unique_ptr<class node::EmbedderSnapshotData const ,struct node::EmbedderSnapshotData::DeleteSnapshotData>(void)" (??1?$unique_ptr@$$CBVEmbedderSnapshotData@node@@UDeleteSnapshotData@12@@std@@QEAA@XZ) 中引用了该符号 1>main.obj : error LNK2019: 无法解析的外部符号 "public: static class std::unique_ptr<class node::EmbedderSnapshotData const ,struct node::EmbedderSnapshotData::DeleteSnapshotData> cdecl node::EmbedderSnapshotData::FromFile(struct _iobuf )" (?FromFile@EmbedderSnapshotData@node@@SA?AV?$unique_ptr@$$CBVEmbedderSnapshotData@node@@UDeleteSnapshotData@12@@std@@PEAU_iobuf@@@Z),函数 "int __cdecl RunNodeInstance(class node::MultiIsolatePlatform ,class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > > const &,class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > > const &)" (?RunNodeInstance@@YAHPEAVMultiIsolatePlatform@node@@AEBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@1@Z) 中引用了该符号 1>main.obj : error LNK2019: 无法解析的外部符号 "public: static class std::unique_ptr<class node::EmbedderSnapshotData const ,struct node::EmbedderSnapshotData::DeleteSnapshotData> cdecl node::EmbedderSnapshotData::FromBlob(class std::vector<char,class std::allocator > const &)" (?FromBlob@EmbedderSnapshotData@node@@SA?AV?$unique_ptr@$$CBVEmbedderSnapshotData@node@@UDeleteSnapshotData@12@@std@@AEBV?$vector@DV?$allocator@D@std@@@4@@Z),函数 "int cdecl RunNodeInstance(class node::MultiIsolatePlatform *,class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > > const &,class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > > const &)" (?RunNodeInstance@@YAHPEAVMultiIsolatePlatform@node@@AEBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@1@Z) 中引用了该符号 1>main.obj : error LNK2019: 无法解析的外部符号 "public: void cdecl node::EmbedderSnapshotData::ToFile(struct _iobuf )const " (?ToFile@EmbedderSnapshotData@node@@QEBAXPEAU_iobuf@@@Z),函数 "int __cdecl RunNodeInstance(class node::MultiIsolatePlatform ,class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > > const &,class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > > const &)" (?RunNodeInstance@@YAHPEAVMultiIsolatePlatform@node@@AEBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@1@Z) 中引用了该符号 1>main.obj : error LNK2019: 无法解析的外部符号 "public: class std::vector<char,class std::allocator > cdecl node::EmbedderSnapshotData::ToBlob(void)const " (?ToBlob@EmbedderSnapshotData@node@@QEBA?AV?$vector@DV?$allocator@D@std@@@std@@XZ),函数 "int cdecl RunNodeInstance(class node::MultiIsolatePlatform *,class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > > const &,class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > > const &)" (?RunNodeInstance@@YAHPEAVMultiIsolatePlatform@node@@AEBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@1@Z) 中引用了该符号

chexiongsheng commented 2 months ago

可以尝试找下看哪个文件有这些符号,看它编译到那个库。

不过最终搞不通也是常态,嵌入式方式不是nodejs的常规使用方式,我之前也是一个个版本的找到能使用的版本。而且还可能需要一些小修改满足各平台的编译。

star-e commented 1 month ago

node 不支持2022,只能用2019。 @trising