2016-12-29 8 views
-1

Я пытаюсь изменить код VLFeat, в частности функцию vl_vlad_code в файле this. Теперь, поскольку в первый раз я редактирую исходный код такой библиотеки, я начал с чего-то простого, например, печати Hello World! в начале fucntion:printf() не работает в исходном коде?

void 
vl_vlad_encode (void * enc, vl_type dataType, 
       void const * means, vl_size dimension, vl_size numClusters, 
       void const * data, vl_size numData, 
       void const * assignments, 
       int flags) 
{ 
    printf("Hello World!"); 
... 

Затем (после this документа конвенции):

  1. Я удалил двоичный код с rm -rf VLFEATROOT/bin
  2. Я перекомпилировать библиотеку с make в VLFEATROOT (без ошибок)

Однако, когда я звоню vl_vlad_code из моего заявления ничего не p rinted. Извещение что библиотека отлично работает в моем приложении C++, она просто «игнорирует» мои изменения.

Просто для полноты картины, я использую Ubuntu 16,04, и это есть варианты Компиляция относительно VLFeat, которые я использую в моем проекте Eclipse CDT:

... -I/home/luca/vlfeat ... -L/home/luca/vlfeat/bin/glnxa64 ... -lvl

UPDATE: следующие предложения в комментариях, я попытался написать что-то в файл таким образом:

void 
vl_vlad_encode (void * enc, vl_type dataType, 
       void const * means, vl_size dimension, vl_size numClusters, 
       void const * data, vl_size numData, 
       void const * assignments, 
       int flags) 
{ 
    FILE *f = fopen("/home/luca/file.txt", "w"); 
    if (f == NULL) 
    { 
     printf("Error opening file!\n"); 
     exit(1); 
    } 
/* print some text */ 
const char *text = "Write this to the file"; 
fprintf(f, "Some text: %s\n", text); 

И файл не создан!

+3

Неверное предложение: 'printf (« Hello World! »);' -> 'printf (« Hello World! \ N »);' –

+0

Да, я уже пробовал (на самом деле это была первая версия): it не работает :) – justHelloWorld

+1

Вы звоните, где? Также упоминается только то, что вы перекомпилируете библиотеку, вы также перекомпилируете ее/повторно с помощью своего приложения? – UnholySheep

ответ

2

Возможно, при запуске приложения вы фактически связываетесь с общесистемной установленной библиотекой. В качестве теста попробуйте добавить каталог, в котором вы создали библиотеку, в переменную окружения LD_LIBRARY_PATH, а затем запустите свою программу.

Из командной строки вы можете сделать:

export LD_LIBRARY_PATH=/path/to/your/lib:${LD_LIBRARY_PATH} 

Если вы используете IDE, вы должны установить переменную внутри ее параметров среды.

Пути в этой переменной будут найдены до поиска системных библиотек.

Вы всегда можете узнать, где именно библиотеки ваш исполняемый ссылающихся на расположены командой:

ldd /path/to/your/executable 
1

Проблема была копия libvl.so в /usr/loca/lib. После удаления проблема была решена, и сообщение было правильно напечатано.

+0

Итак, вы связывались с системной библиотекой, как я предложил в качестве возможности. – diametralpitch

+0

Вручную удалять этот файл может сломать другие программы, если они зависят от него. – diametralpitch

 Смежные вопросы

  • Нет связанных вопросов^_^