yanyiwu / nodejieba

"结巴"中文分词的Node.js版本
MIT License
3.07k stars 280 forks source link

Win7下安装 nodejieba@1.4.9 失败,疑似版本问题导致编译不成功。 #52

Closed guodunmin closed 8 years ago

guodunmin commented 8 years ago

请指教: 环境 win7 64位(已更新至Windows SDK 7.1),Visual Studio 2010, node@5.7.0, node-gyp@3.2.1, python@2.7.0 安装 nodejieba@1.4.9 失败,疑似版本问题导致编译不成功。 这是日志文件

yanyiwu commented 8 years ago

node版本都已经到5.x了啊真是凶猛。 能否把报错信息贴一下?

yanyiwu commented 8 years ago

https://github.com/yanyiwu/nodejieba/issues/45 中已经验证:在 nodejieba@1.4.7 版本中已经修复了以前对于 windows 有兼容性问题的bug。 所以很有可能是你那边的node-gyp安装版本的问题,nodejieba依赖node-gyp,在 node-gyp的README(https://github.com/nodejs/node-gyp) 中看出,在Windows7里需要依赖 :

Windows 7/8: Microsoft Visual Studio C++ 2013 for Windows Desktop (Express version works well)

所以请检查一下时候安装了 visual studio c++ 2013

guodunmin commented 8 years ago

辛苦,再看看错误日志,详见附件。 已按 node-gyp 要求顺利安装 visual studio c++ 2013。

$ npm install nodejieba --save

> nodejieba@1.4.10 install E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba
> node-gyp rebuild

E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba>if not defined npm_config_node_gyp (node "D:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "" rebuild )
▒ڴ˽▒▒▒▒▒▒▒▒һ▒▒▒▒▒▒һ▒▒▒▒Ŀ▒▒▒▒Ҫ▒▒▒ò▒▒▒▒▒▒ɣ▒▒▒▒▒ӡ▒/m▒▒▒▒▒ء▒
  index.cpp
  nodejieba.cpp

附件:日志文件

yanyiwu commented 8 years ago

node-gyp版本多少的?我对windows环境不熟悉,不知道是否安装完vs2013后需要重装一下node-gyp? 看报错信息应该不是nodejieba代码的问题。应该还是环境的问题。

guodunmin commented 8 years ago

是 node-gyp@3.2.1 附件:安装 nodejieba 实操步骤

PS:感谢您及时的反馈。选择windows的初衷是实验性学习的性价比好(熟悉操作简单方便,教程多学习成本较低),而遇到这类问题是我始料未及的。这使我更倾向去尝试linux系统,买个ECS,为的是接近实战,折腾博客、前端开发、实践高可用部署等。想听听您的建议。

yanyiwu commented 8 years ago
  1. 你的报错信息里面一些中文都是乱码,看不出出错的是啥?能不能直接贴报错信息在GitHub上面,而不是用文件发。
  2. 参考http://stackoverflow.com/questions/32964144/gyp-err-stack-error-c-program-files-x86-msbuild-12-0-bin-msbuild-exe-fail 试试 npm install --msvs_version=2013 看看?
  3. 强烈建议尝试Linux系统,我几乎从来不在Windows上面搞开发。
guodunmin commented 8 years ago
  1. 在git bash中的报错信息就是乱码,何解?
  2. 没研究这命令npm install --msvs_version=2013 实操如下:
X230@X230-PC MINGW64 /e/BGNNR/TEST/blog/hexo
$ npm install --msvs-version=2013

> nodejieba@1.4.10 install E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba
> node-gyp rebuild

E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba>if not defined npm_config_node_gyp (node "D:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "" rebuild )
在此解决方案中一次生成一个项目。若要启用并行生成,请添加“/m”开关。
  index.cpp
  nodejieba.cpp
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\lib\utils.h(19): warning C4267: “参数”: 从“size_t”转换到“uint32_t”,可能丢失数据 (..\lib\index.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\lib\utils.h(19): warning C4267: “参数”: 从“size_t”转换到“uint32_t”,可能丢失数据 (..\lib\nodejieba.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\lib\utils.h(30): warning C4267: “参数”: 从“size_t”转换到“uint32_t”,可能丢失数据 (..\lib\index.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\lib\utils.h(30): warning C4267: “参数”: 从“size_t”转换到“uint32_t”,可能丢失数据 (..\lib\nodejieba.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\lib\utils.h(41): warning C4267: “参数”: 从“size_t”转换到“uint32_t”,可能丢失数据 (..\lib\nodejieba.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\lib\utils.h(41): warning C4267: “参数”: 从“size_t”转换到“uint32_t”,可能丢失数据 (..\lib\index.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nan\nan_new.h(208): warning C4267: “参数”: 从“size_t”转换到“int”,可能丢失数据 (..\lib\index.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
          e:\bgnnr\test\blog\hexo\node_modules\nodejieba\lib\utils.h(17): 参见对正在编译的函数 模板 实例化“v8::Local<v8::Array> Nan::New<v8::Array,unsigned __int64>(A0)”的引用
          with
          [
              A0=unsigned __int64
          ]
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\deps\cppjieba\SegmentBase.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 (..\lib\nodejieba.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\deps\cppjieba\FullSegment.hpp(65): warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据 (..\lib\nodejieba.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\deps\cppjieba\HMMSegment.hpp(152): warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据 (..\lib\nodejieba.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nodejieba\deps\cppjieba\HMMSegment.hpp(168): warning C4267: “初始化”: 从“size_t”转换到“int”,可能丢失数据 (..\lib\nodejieba.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
e:\bgnnr\test\blog\hexo\node_modules\nan\nan_new.h(208): warning C4267: “参数”: 从“size_t”转换到“int”,可能丢失数据 (..\lib\nodejieba.cpp) [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
          e:\bgnnr\test\blog\hexo\node_modules\nodejieba\lib\utils.h(17): 参见对正在编译的函数 模板 实例化“v8::Local<v8::Array> Nan::New<v8::Array,unsigned __int64>(A0)”的引用
          with
          [
              A0=unsigned __int64
          ]
  win_delay_load_hook.c
C:\Users\X230\.node-gyp\5.7.0\Release\node.lib : fatal error LNK1127: 库已损坏 [E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba\build\nodejieba.vcxproj]
gyp ERR! build error
gyp ERR! stack Error: `C:\Program Files (x86)\MSBuild\12.0\bin\msbuild.exe` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (D:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:100:13)
gyp ERR! stack     at ChildProcess.emit (events.js:185:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "D:\\Program Files\\nodejs\\node.exe" "D:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd E:\BGNNR\TEST\blog\hexo\node_modules\nodejieba
gyp ERR! node -v v5.7.0
gyp ERR! node-gyp -v v3.2.1
gyp ERR! not ok
npm WARN install:nodejieba@1.4.10 nodejieba@1.4.10 install: `node-gyp rebuild`
npm WARN install:nodejieba@1.4.10 Exit status 1
npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.8

X230@X230-PC MINGW64 /e/BGNNR/TEST/blog/hexo
$ 
guodunmin commented 8 years ago

有进展了,发现编译环境不支持、不匹配。 实操过程发布在简书:http://www.jianshu.com/p/d541c8585479

yanyiwu commented 8 years ago

好的,搞定了就行,谢谢反馈。

heimiao commented 8 years ago

我这里也是报错了,好像安装了nodejieba就报node-gyp的错误 错误代码如下: C:\Users\MAWEIC~1\AppData\Local\Temp\tmp-6748q68KMCXAJksi\node_modules\hbook\node_modules\gitbook-plugin-search2\node_modules\lunr\node_modules\nodejieba>if not defined npm_config_node_gyp (node "C:\Users\maweichao\AppData\Roaming\npm\node_modules\hbook-cli\node_modules\npm\bin\node-gyp-bin....\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node rebuild )

Error: nodejieba@2.2.4 install: node-gyp rebuild Exit status 1

heimiao commented 8 years ago

我的电脑window7系统64位的: 我用的是最新的node版本6.2.0的也有你说的visual studio c++ 2013。结果还是报这个错,