代码之家  ›  专栏  ›  技术社区  ›  Ethan

为什么.so文件不存在时会出现“没有这样的文件或目录”错误?

  •  2
  • Ethan  · 技术社区  · 14 年前

    我正在尝试从RHEL 5上的Ruby 1.8.7连接到MS SQL Server。我在用 FreeTDS 以及 tiny_tds 鲁比根。

    我让它在OSX上运行良好。

    在Linux上,我安装了FreeTDS并确认它可以从命令行连接到SQL Server没有问题。以及 gem install tiny_tds 一切顺利。

    但是,当我部署到Linux并尝试打开Rails控制台时,会出现以下错误:

    $ script/console production
    Loading production environment (Rails 2.3.5)
    libsybdb.so.5: cannot open shared object file: No such file or directory - /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/tiny_tds-0.2.1/lib/tiny_tds/tiny_tds.so
    /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/tiny_tds-0.2.1/lib/tiny_tds/tiny_tds.so
    /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    /opt/deployed_rails_apps/employeedata/releases/20101025214030/vendor/rails/activesupport/lib/active_support/dependencies.rb:158:in `require'
    /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/tiny_tds-0.2.1/lib/tiny_tds.rb:7
    /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    
    etc...
    

    我检查了这个文件,它说它找不到实际上存在于文件系统。。。

    /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems \
        /tiny_tds-0.2.1/lib/tiny_tds/tiny_tds.so
    

    有什么办法让它工作吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   the Tin Man    14 年前

    您是如何从源代码或发行版安装FreeTDS的?我发现很多基于发行版的安装不会安装所需的头文件和开发文件,gems使用这些文件来定位所需的库。如果您使用了这个发行版,您可能会寻找一个freetds dev或类似的东西,并安装它。

    在发行版安装中,文件也可能安装在与源安装不同的目录中。我碰到过几次不同的包裹。小小的TDS gem可能有一些配置选项,让您定义FreeTDS文件隐藏的位置。

    FREETDS_LIBRARIES = ['sybdb']
    FREETDS_HEADERS = ['sqlfront.h', 'sybdb.h', 'syberror.h']
    

    在主机上执行定位或查找以查看是否可以定位这些文件。根据extconf.rb,库应该基于 /lib /lib/freetds 标题应该在 /include /include/freetds .