Я пытаюсь использовать VLFeat в своем коде C в Ubuntu 16.04.3. Следуя официальные инструкции, я создал тестовый файл:
extern "C"
{
#include <vlfeat/vl/svm.h>
}
int main (int argc, const char * argv[]) {
VL_PRINT ("Hello world!") ;
return 0;
}
Из командной строки я могу подтвердить, что svm.h находится в vlfeat / vl. Я тогда пытаюсь
gcc main.cpp
но получаю сообщение об ошибке
main.cpp:3:27: fatal error: vlfeat/vl/svm.h: No such file or directory
Любые советы о том, как правильно использовать VLFeat в коде C? Спасибо.
Вы создаете исполняемый файл иначе, чем указано в инструкции: $ g++ main.cpp -o vlfeat-test -IVLROOT -LVLROOT/bin/a64/ -lvl
@FiddlingBits Действительно, но я все еще получаю тот же код ошибки с g++ main.cpp -o vlfeat-test -I/vlfeatdir -L/vlfeatdir/bin/a64/ -lvl
В каком каталоге вы находитесь при запуске gcc main.cpp?
@jwdonahue каталог, который я назвал vlfeatdir, который содержит main.cpp и каталог vlfeat (который сам содержит vl и все остальное для vlfeat)
Некоторые компиляторы ищут только по пути include, когда вы используете угловые скобки #include <d/f.h>, но цитируемые включения всегда коренятся в текущем каталоге во время сборки. Попробуйте #include "vlfeat/vl/svm.h".
Также часто можно увидеть .; в пути include или в конфигурации компилятора, которая фактически делает угловые скобки и кавычки включает то же самое. Обычно я отключаю эти антишаблоны в своей автоматизации сборки. Лучше сохранять четкое разделение между конфигурациями на уровне проекта, пользователя и системы.
@jwdonahue Я перешел на кавычки и теперь получаю main.cpp:(.text+0x10): undefined reference to `vl_get_printf_func'collect2: error: ld returned 1 exit status
Итак, теперь вам просто нужно связать нужную библиотеку. Где вы разместили свою установку VLFeat и на какую архитектуру вы ориентируетесь?





Нужен
-I<directory>? В каком каталоге находитсяvlfeat?