2017-03-03 14 views
0

C++ 파일에서 C에서 VLFeat Libaries를 사용하고 싶습니다. g ++ 용 자습서는 다음과 같이 컴파일 된 기본 "Hello World"예제를 제공합니다.C++에서 사용하려는 C 라이브러리의 라이브러리 경로를 환경에 추가하는 방법

g++ main.cpp -o vlfeat-test -I /disk/no_backup/lesi/vlfeat-0.9.20/ -L /disk/no_backup/lesi/vlfeat-0.9.20/bin/glnxa64/ -lvl 

이 작동합니다. 내가 지금 원하는 것은 내의 .bashrc에 라이브러리를 추가하는 것입니다, 그래서 여분의 플래그 필요가 없습니다

export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/disk/no_backup/lesi/vlfeat-0.9.20 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/disk/no_backup/lesi/vlfeat-0.9.20/bin/glnxa64 

과 같이 사용 :

g++ main.cpp -o vlfeat-test 

불행하게도 나는 다음과 같은 얻을 오류 :

/tmp/cc6tzB55.o: In function `main': 
main.cpp:(.text+0x10): undefined reference to `vl_get_printf_func' 
collect2: error: ld returned 1 exit status 

내가 뭘 잘못하고 있니?

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

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

VLFeat 도서관 링크 : 여기

튜토리얼에서 "안녕하세요"코드의 http://www.vlfeat.org/index.html

답변

2

당신은 헤더를 찾을 수 지정,하지만 당신은에 연결하는 컴파일러를 말하지 않는다 도서관.

"이 C 파일이이 헤더에 포함되었습니다"에서 "이 프로그램과이 라이브러리를 연결하는 것이 좋습니다"와 같은 마법 매핑이 없으므로 그렇게 작동하지 않습니다.

나는 세 가지 다른 라이브러리 파일에 구현 된 기능을 선언 한 unwind-mess.h 헤더, 도서관을 확인하고 도서관 libcream.a, libmeringue.alibberry.a 호출 할 수 있습니다.

컴파일러에게 링크해야 할 추가 라이브러리 코드가 있음을 알리기 위해 여전히 -lvl 옵션이 필요합니다.

+0

그래, 그 트릭을했다. 감사! – user4457190