2017-03-03 221 views
0

我想從C++文件中使用C中的VLFeat Libaries。他們的g ++教程提供了一個基本的「Hello World」示例,其編譯如下:如何向C++中添加要在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 

我在做什麼錯?

下面是本教程的「Hello World」的代碼:

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.alibmeringue.alibberry.a

您仍然需要-lvl選項來告訴編譯器有需要鏈接的額外庫代碼。

+0

是的,這沒有把戲。謝謝! – user4457190