windows:rails:安装bson_ext时出错

 李东润 发布于 2022-12-19 12:39

当试图安装bson_ext我看到错误...安装json gem工作正常,这也需要构建原生扩展 - 我已经尝试了所有看到类似的问题,没有很好的答案

$ gem install bson_ext
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
ERROR:  Error installing bson_ext:
        ERROR: Failed to build gem native extension.

        c:/Ruby193/bin/ruby.exe extconf.rb
checking for asprintf()... no
checking for ruby/st.h... yes
checking for ruby/regex.h... yes
checking for ruby/encoding.h... yes
creating Makefile

make
generating cbson-i386-mingw32.def
compiling bson_buffer.c
compiling cbson.c
cbson.c:25:23: fatal error: arpa/inet.h: No such file or directory
compilation terminated.
make: *** [cbson.o] Error 1


Gem files will remain installed in c:/Ruby193/lib/ruby/gems/1.9.1/gems/bson_ext-
1.11.1 for inspection.
Results logged to c:/Ruby193/lib/ruby/gems/1.9.1/gems/bson_ext-1.11.1/ext/cbson/
gem_make.out

$ gem install json
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
Successfully installed json-1.8.1
1 gem installed
Installing ri documentation for json-1.8.1...
Installing RDoc documentation for json-1.8.1...

小智.. 9

根据这篇文章 不是一个windows库,所以winsock2.h应该用它来代替.

要更改此引用,我已完成以下**:

转到安装文件夹(c:/Ruby193/lib/ruby/gems/1.9.1/gems/bson_ext-1.11.1)

向下钻取一个级别到cbson文件夹并找到cbson.c

在您喜欢的文本编辑器中打开cbson.c并找到读取的行 #include ""

将该行更改为 #include winsock2.h

打开命令提示符,浏览到安装文件夹,然后运行 gem build bson_ext.gemspec

将新创建的.gem文件移动到安全的位置(例如,%userprofile%\ Desktop).

转到gem文件夹并删除整个bson_ext文件夹

回到命令提示符窗口,将目录更改为放置新创建的.gem文件的位置(cd%userprofile%\ Desktop,如果您完全按照这些步骤操作)

运行gem install bson_ext-1.11.1.gem --local并且gem现在应该成功安装.

**巨大的警告:我刚刚通过mongodb for rails教程,我没有任何可用的代码来测试它.虽然这消除了安装错误,但我无法确定此修复是否完整.此库引用是1.11.1版本的新增内容.如果安装版本1.10.2,则不会发生此问题(gem install bson_ext -v 1.10.2).我会留给你决定哪种解决方案对你更有意义.

编辑:基于对github上的bson-ruby项目的更改,更好的修复方法是更改​​包括如下所示:

#ifdef _WIN32
#include 
#else
#include 
#endif


小智.. 5

在DevKit上编译时不需要该文件.

要防止出现此错误,只需在预期位置创建一个空文件即可.如果您的DevKit安装在C:\ DevKit中,则该文件将在C:\ DevKit\mingw\include\arpa\inet.h中出现.

这也应该修复其他本土宝石.原因是,通常来自arpa/inet.h的定义已经来自大多数时候自动包含的其他包含文件.

2 个回答
  • 根据这篇文章 <arpa/inet.h>不是一个windows库,所以winsock2.h应该用它来代替.

    要更改此引用,我已完成以下**:

    转到安装文件夹(c:/Ruby193/lib/ruby/gems/1.9.1/gems/bson_ext-1.11.1)

    向下钻取一个级别到cbson文件夹并找到cbson.c

    在您喜欢的文本编辑器中打开cbson.c并找到读取的行 #include "<arpa/inet.h>"

    将该行更改为 #include winsock2.h

    打开命令提示符,浏览到安装文件夹,然后运行 gem build bson_ext.gemspec

    将新创建的.gem文件移动到安全的位置(例如,%userprofile%\ Desktop).

    转到gem文件夹并删除整个bson_ext文件夹

    回到命令提示符窗口,将目录更改为放置新创建的.gem文件的位置(cd%userprofile%\ Desktop,如果您完全按照这些步骤操作)

    运行gem install bson_ext-1.11.1.gem --local并且gem现在应该成功安装.

    **巨大的警告:我刚刚通过mongodb for rails教程,我没有任何可用的代码来测试它.虽然这消除了安装错误,但我无法确定此修复是否完整.此库引用是1.11.1版本的新增内容.如果安装版本1.10.2,则不会发生此问题(gem install bson_ext -v 1.10.2).我会留给你决定哪种解决方案对你更有意义.

    编辑:基于对github上的bson-ruby项目的更改,更好的修复方法是更改​​包括如下所示:

    #ifdef _WIN32
    #include <winsock2.h>
    #else
    #include <arpa/inet.h>
    #endif
    

    2022-12-19 12:41 回答
  • 在DevKit上编译时不需要该文件.

    要防止出现此错误,只需在预期位置创建一个空文件即可.如果您的DevKit安装在C:\ DevKit中,则该文件将在C:\ DevKit\mingw\include\arpa\inet.h中出现.

    这也应该修复其他本土宝石.原因是,通常来自arpa/inet.h的定义已经来自大多数时候自动包含的其他包含文件.

    2022-12-19 12:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有