1

我尝试在自己的项目中使用 VLFEAT。按照其主页中提供的说明进行操作,我仍然有一个问题。

首先,我使用 g++ 'make ARCH=glnx86' 编译库。看起来没问题。然后我使用一个小程序检查它是否编译正确。

extern "C" {
#include <vl/generic.h>
}

int main (int argc, const char * argv[]) {
VL_PRINT ("Hello world!") ;
return 0;
}

我使用以下脚本进行编译:

 $ g++ main.cpp -o vlfeat-test -IVLROOT -LVLROOT/bin/glnx86/ -lvl

VLROOT 是我电脑中 vlfeat 路径的缩写。

失败了!!错误信息是:

 /usr/bin/ld: cannot find -lvl

我知道 -l 标志用于告诉 g++ 应该链接哪个静态库。在这种情况下,似乎需要“libvl.a”。但是,我检查了 vlfeat,它没有“libvl.a”。仅找到动态库“libvl.so”。

vlfeat 本身不提供静态库吗?以及如何修复此错误以便我可以在自己的项目中使用它?

4

1 回答 1

0

您需要使用'$'符号来正确使用VLROOT变量的值:

export VLROOT=/path/to/vlfeat
g++ vl.cpp -o vlfeat-test -I$VLROOT -L$VLROOT/bin/glnx86/ -lvl

然后确保动态加载器找到您可以执行的库:

export LD_LIBRARY_PATH=$VLROOT/bin/glnx86/
./vlfeat-test

或者,libvl.so例如在下面复制/usr/local/lib并运行ldconfig以刷新缓存。

有关dlopen(3)更多详细信息,请参阅。

于 2015-03-29T11:31:31.660 回答