2016-12-29 8 views
-1

VLFeat 소스 코드를 수정하려고합니다. 특히 이 파일 this에 있습니다. 그런 라이브러리의 소스 코드를 편집 한 것은 처음이므로 Hello World 인쇄와 같은 간단한 작업부터 시작했습니다! fucntion의 시작 부분에 : 나는 오류없이 (VLFEATROOTmake와 라이브러리를 다시 컴파일 printf()가 소스 코드에서 작동하지 않습니까?

  1. 내가 rm -rf VLFEATROOT/bin
  2. 와 바이너리 코드를 제거 : 다음

    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 문서 규칙을 다음))

그러나 내 응용 프로그램에서 vl_vlad_code을 호출하면 아무 것도 p 않습니다. rinted. 알림 : 라이브러리가 내 C++ 응용 프로그램에서 올바르게 작동한다는 것은 내 변경 사항을 "무시"한다는 의미입니다.

그냥 완성도, 나는 우분투 16.04 사용하고 이것이 내가 내 이클립스 CDT 프로젝트에 사용 VLFeat에 대한 컴파일 옵션은 다음과 같습니다

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

UPDATE : 코멘트에 다음의 제안, I 다음과 같이 파일에 무언가를 쓰려고 시도했습니다.

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

그래, 이미 그것을 시도했다. 작동하지 않습니다 :) – justHelloWorld

+1

당신은 어디에서 전화하고 있습니까? 또한 라이브러리를 다시 컴파일해야한다고 말하면서도 응용 프로그램과 함께 다시 컴파일하거나 다시 링크합니까? – UnholySheep

답변

2

응용 프로그램을 실행할 때 실제로 시스템 전체에 설치된 라이브러리와 연결되어있을 수 있습니다. 테스트로 라이브러리를 빌드 한 디렉토리를 LD_LIBRARY_PATH 환경 변수에 추가 한 다음 프로그램을 실행하십시오.

명령 줄에서 당신은 할 수 있습니다 : 당신이 IDE를 사용하는 경우

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

, 당신은 환경 설정의 내부 변수를 설정해야합니다.

시스템 라이브러리가 검색되기 전에이 변수의 경로가 검색됩니다. 당신은 항상 당신의 실행 파일이 연결되어있는 라이브러리를 실행하여 위치 할 정확한 위치를 찾을 수 있습니다

:

ldd /path/to/your/executable 
1

문제는 /usr/loca/liblibvl.so의 복사본이었다. 삭제 후 문제가 해결되고 메시지가 올바르게 인쇄됩니다.

+0

그렇다면 당신은 내가 제안한 것처럼 시스템 라이브러리와 링크하고있었습니다. – diametralpitch

+0

수동으로 해당 파일을 제거하면 다른 프로그램이 종속되어있는 경우 해당 프로그램이 손상 될 수 있습니다. – diametralpitch