4

错误

$ sudo gem 安装 tiny_tds

构建原生扩展。这可能需要一段时间...

错误:安装 tiny_tds 时出错:

错误:无法构建 gem 原生扩展。

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb

检查 iconv.h 中的 iconv_open() ... 否

检查 -liconv 中的 iconv_open()... 是

检查 sybfront.h... 是的

检查 sybdb.h... 是

检查 -lsybdb 中的 tdsdbopen()... 否


家酿

即使经过

$ brew install freetds


手动安装

$ tar zxf freetds-stable.tgz

$ cd freetds-0.91

$ ./配置

$ 制作

$ sudo 安装


它似乎缺少以下文件/usr/local/lib/

  • libsybdb.so

相反,我有以下文件:

  • libsybdb.a
  • libsybdb.dylib
  • libsybdb.la

研究

4

3 回答 3

22

我通过明确指定 64 位架构解决了这个问题:

$ brew install freetds
$ sudo ARCHFLAGS="-arch x86_64" gem install tiny_tds

原因是在 gem 构建过程中,mkmf 会尝试寻找 32 位版本的 freetds,这是不可用的。中的错误消息mkmf.log说:

ld: warning: ignoring file /usr/local/lib/libsybdb.dylib, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/lib/libsybdb.dylib
Undefined symbols for architecture i386:
  "_tdsdbopen", referenced from:
      _t in conftest-a13287.o
ld: symbol(s) not found for architecture i386
于 2015-03-04T13:37:38.650 回答
2

解决方案

只需添加/opt/chef/embedded/bin到我的$PATH

$ sudo nano ~/.bashrc


更改后的文件内容

export PATH="/opt/chef/embedded/bin:$PATH:$HOME/.rvm/bin" # 将 RVM 添加到 PATH 以进行脚本编写


更新$PATH

$ 源 ~/.bashrc


安装 gem(确保您已freetds使用上述方法之一进行安装)

$ sudo gem 安装 tiny_tds


特别注意:这假设您已经安装了厨师

$ curl -L https://www.opscode.com/chef/install.sh | 须藤重击

参考:

显然要安装的命令如下:

$ sudo gem install tiny_tds -- --with-freetds-include=/usr/local/freetds/include --with-iconv-include=/opt/chef/embedded/include --with-freetds-lib=/usr/本地/freetds/lib

于 2014-06-25T14:47:26.063 回答
0

正如我在Homebrew / TinyTDS / FreeTDS bundle error上发布的那样,除此之外brew install freetds,您可能还需要配置 bundler 以知道在哪里可以找到 freetds。

例如(取决于 homebrew 安装 freetds 的确切位置):

bundle config set --global build.tiny_tds --with-freetds-dir=/opt/homebrew/Cellar/freetds/1.3.3
于 2021-12-09T06:23:10.400 回答