如何让 ruby​​-svm 在 macports 的 /opt/local 中查找库?

Posted

技术标签:

【中文标题】如何让 ruby​​-svm 在 macports 的 /opt/local 中查找库?【英文标题】:How do I get ruby-svm to look for libraries in macports' /opt/local? 【发布时间】:2011-01-12 11:21:52 【问题描述】:

我想安装 Ruby SVM。我已经有正常设置的macports,并且通过端口安装了libsvm就好了。但是当我去编译rubysvm时,它会出错。 :(

Ruby SVM:http://rubysvm.cilibrar.com/download/(尽管大多数链接是 404) libsvm:http://www.csie.ntu.edu.tw/~cjlin/libsvm/

试试这个:

sudo port install libsvm
wget http://debian.cilibrar.com/debian/pool/main/libs/libsvm-ruby/libsvm-ruby_2.8.4.orig.tar.gz
tar -xzf libsvm-ruby_2.8.4.orig.tar.gz
cd libsvm-ruby-2.8.4
./configure

...你得到错误:

...
checking libsvm/svm.h usability... no
checking libsvm/svm.h presence... no
checking for libsvm/svm.h... no
Error, cannot find LIBSVM svm.h header.

我试过了,没有成功:

export DYLD_LIBRARY_PATH=/opt/local/include/:/opt/local/lib/
(... ditto for C_INCLUDE_PATH, LD_LIBRARY_PATH, CPATH, & LIBRARY_PATH)
LDFLAGS="-I/opt/local/include -L/opt/local/lib" CPPFLAGS="-I/opt/local/include -L/opt/local/lib" ./configure

我该如何解决这个问题?

【问题讨论】:

通常只需将 -L args 放入 LDFLAGS 并将 -I args 放入 CPPFLAGS 即可。这将是一个写得不好的配置脚本,它没有在正确的上下文中使用 *FLAGS 变量。 AFAICT 它不尊重这些。但是配置脚本是一堆疯狂的自动意大利面,我只能勉强解析。 【参考方案1】:

libsvm-ruby 假设 libsvm 将其头文件安装在 PREFIX/include/libsvm/svm.h 中,但 macports 包将其放在 /opt/local/include 中。

这是一个麻烦,但最简单的解决方法是手动创建目录 /opt/local/include/libsvm 并在那里移动/复制 svm.h 标头。您可能仍需要使用 LDFLAGS 和 CPPFLAGS 设置运行您的配置命令,因为看起来 macports 安装不会更新 pkg-config(libsvm-ruby 使用它来尝试查找编译器标志)。

我会将此作为包错误报告给 macports 维护者。如果你了解 macport 的 Portfiles,你甚至可以提供一个补丁。

更新:我还没有实际尝试过,所以一旦你通过了头文件检测,可能还有其他问题。

更新 2:我能够通过以下配置:

sudo mkdir /opt/local/include/libsvm
sudo cp /opt/local/include/svm /opt/local/include/libsvm/
CPPFLAGS=-I/opt/local/include LIBS=-L/opt/local/lib ./configure

但 libsvm-ruby 似乎依赖于 obstack.h,它在 OS X 上本机不存在。基于this,可能有一种方法可以复制您需要的文件,但您需要修补 libsvm-ruby main.cpp 和 Makefile 以将其链接。

祝你好运!

【讨论】:

以上是关于如何让 ruby​​-svm 在 macports 的 /opt/local 中查找库?的主要内容,如果未能解决你的问题,请参考以下文章

安装Homebrew

如何使用安装在 macports 中的 gcc?

安装 Xcode 4.3 后无法获得 MacPort 功能

macports安装后如何启动spyder

如何解决 Homebrew 和 MacPorts 或 Fink 之间的冲突?

如何让 SVM 很好地处理 scikit-learn 中的缺失数据?