由于 vowpal wabbit 对 boost 库的依赖而导致的错误

Posted

技术标签:

【中文标题】由于 vowpal wabbit 对 boost 库的依赖而导致的错误【英文标题】:Errors due to vowpal wabbit's dependencies on boost library 【发布时间】:2012-07-11 08:48:55 【问题描述】:

我正在努力安装 vowpal wobbit,但当我运行 make 文件时它失败了,抛出:

    cd library; make; cd .. 
    g++ -g -o ezexample temp2.cc -L ../vowpalwabbit -l vw -l allreduce -l boost_program_options -l z -l pthread 
    ld: library not found for -lboost_program_options collect2: ld returned 1   exit status make[1]: *** [ezexample] Error 1'

然后我通过指定 -L/usr/local/lib 在此处添加了指向 boost 库的链接

现在我收到以下错误:

    g++ -g -o ezexample temp2.cc -L/usr/local/lib ../vowpalwabbit -l vw -l  allreduce -l boost_program_options -l z -l pthread 
    ld: library not found for -lvw
    collect2: ld returned 1 exit status   
    make: *** [ezexample] Error 1

【问题讨论】:

这(可能)更适合 SO。投票结束。 不过,我正在寻找使用过 vowpal wabbit 的人。 你有一个有效的boost 安装吗? program_options 库应该单独构建,如果我没记错的话。此外,-L-l 开关后不应有空格。 【参考方案1】:

我碰巧让一切都在 OS X 10.7 上运行,如下所示:

    确保您的 Boost 安装工作正常。如Getting started页面所示,通常我们只需要头文件,但一些Boost库必须单独构建,包括用于处理来自命令行或配置文件的选项的program_options库。进入你的boost 文件夹,然后在你的shell提示符下:

    $ ./bootstrap.sh
    $ ./bjam
    

    这将编译并构建所有内容。现在您的boost 目录中应该有一个bin.v2/ 目录,其中包含为您的系统构建的所有库(静态库和线程库)。

    $ ls bin.v2/libs/
    date_time       iostreams       python          serialization   test
    filesystem      math            random          signals         thread
    graph           program_options regex           system          wave
    

    更重要的是,stage/lib/ 目录中提供了额外的 Boost 库。对我来说,这些是Mach-O 64-bit dynamically linked shared library x86_64

    包含路径 应该是your_install_dir/boost_x_xx_x,其中boost_x_xx_x 是您工作的Boost 的基本名称。 (我个人在/usr/local/share/ 中有boost_1_46_1,我将它符号链接到/usr/local/share/boost 以避免记住版本号。)库路径(用于链接)应为your_install_dir/boost_x_xx_x/stage/lib。但是,最好在通常的位置进行符号链接或复制(这是我所做的)所有内容,即 /usr/local/include/boost 用于头文件,/usr/local/lib 用于库。

    编辑vowpal_wabbit 目录中的Makefile,并更改包含/库路径以反映您当前的安装。 Makefile 应如下所示(前 12 行):

    COMPILER = g++
    UNAME := $(shell uname)
    
    ifeq ($(UNAME), FreeBSD)
    LIBS = -l boost_program_options -l pthread -l z -l compat
    BOOST_INCLUDE = /usr/local/include
    BOOST_LIBRARY = /usr/local/lib
    else
    LIBS = -l boost_program_options -l pthread -l z
    BOOST_INCLUDE = /usr/local/share/boost            # change path to reflect yours
    BOOST_LIBRARY = /usr/local/share/boost/stage/lib  # idem
    endif
    

    然后,你准备编译vowpal_wabbitmake clean,如果你已经编译好了):

    $ make
    $ ./vw --version
    6.1
    $ make test
    

【讨论】:

【参考方案2】:

您还可以使用brew 在 OS X 上安装 vowpal wabbit:

brew install vowpal-wabbit

或者你可以只安装 boost,然后从 github repo 安装 vw

brew install boost

【讨论】:

(+1) 是的,这就是我现在所做的,我肯定改用 Homebrew。 如果您使用 brew 安装 vowpal-wabbit,是否可以使用 vw-hypersearch 实用程序?我收到一条错误消息,指出“找不到命令”,但 vw 的其余部分工作正常。【参考方案3】:

为了在 CentOS 7 上安装(6.5 perl 版本对于最新的 vw 源代码来说太旧了),我在 http://wkoplitz.blogspot.be/2012/12/vowpal-wabbit-on-centos.html 找到了可以正常工作的说明:

yum install zlib-devel boost-devel

yum groupinstall "Development Tools"

git clone git://github.com/JohnLangford/vowpal_wabbit.git

cd vowpal_wabbit

./autogen.sh

make

make test

【讨论】:

以上是关于由于 vowpal wabbit 对 boost 库的依赖而导致的错误的主要内容,如果未能解决你的问题,请参考以下文章

Vowpal Wabbit Logistic 回归

Vowpal Wabbit 的梯度提升

Vowpal Wabbit 模型在使用像素 RGB 值对图像进行多类分类时效果不佳

vowpal-wabbit:使用多次通过、保持和保持期来避免过度拟合?

使用 Vowpal wabbit 的上下文强盗

Vowpal Wabbit 如何表示分类特征