Я пытаюсь использовать 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 не предоставляет статическую библиотеку? И как исправить эту ошибку, чтобы я мог использовать ее в своем собственном проекте?
Вам нужно использовать '$'
знак, чтобы правильно использовать значение вашего 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)
Больше подробностей.