在节点本机模块中链接boost库,目标文件需要备用库版本

时间:2018-07-11 16:46:36

标签: c++ boost linker

最近,我需要为我工作的其中一个本机节点模块引入Boost Graph库以及Boost序列化。我有一个单独的VS项目,我将对该模块进行所有开发和测试。从VS项目运行时,该项目可以按预期进行编译,链接和工作。

在使用node-gyp构建静态序列化库和模块时遇到问题。我在binding.gyp文件的库部分中包含了序列化库的完整路径。在由node-gyp编译文件生成的目标文件中,以下行导致链接器失败:

  

/ FAILIFMISMATCH:“ _ CRT_STDIO_ISO_WIDE_SPECIFIERS = 0” ^ @ ^ Dlibboost_serialization-vc140-mt-s-x64-1_67.lib ^ @ ^ Dlibboost_serialization-vc140-mt-s-x64-1_67.lib^@^Duuid.lib^ @ ^ Duuid.lib ^ @

目标文件需要libboost_serialization-vc140-mt-s-x64-1_67.lib。当构建过程尝试链接文件时,链接器会显示错误:

  

LINK:致命错误LNK1104:无法打开文件'libboost_serialization-vc140-mt-s-x64-1_67.lib'

但是,boost会构建libboost_serialization-vc141-mt-s-x64-1_67.lib,该版本与目标文件所期望的版本不同。我已经尝试构建目标文件所要查找的版本,但是似乎并没有得到增强(每次尝试时,即使我指定了备用工具集,它也会跳过所有目标)。

如何更改目标文件期望的库版本?

1 个答案:

答案 0 :(得分:0)

当我尝试构建序列化库的“正确”版本时,我一直在使用toolset=msvc-140。应该是toolset=msvc-14.0。有时候我很笨。