2012-11-09 123 views
3

我需要为我自己的C++程序使用ZBar库,但我甚至不能编译这些示例。 它看起来像编译器无法找到对象文件或类似的东西, 我得到像“未定义的引用_zbar_get_error_code'”的错误。如何编译ZBar示例? (未定义的参考...)

我从their wiki复制以下来源:

#include <iostream> 
#include <zbar.h> 

using namespace std; 
using namespace zbar; 

class MyHandler : public Image::Handler 
{ 
void image_callback (Image &image) 
{ 
    for(SymbolIterator symbol = image.symbol_begin(); 
     symbol != image.symbol_end(); 
     ++symbol) 
     cout << "decoded " << symbol->get_type_name() << " symbol " 
      << "\"" << symbol->get_data() << "\"" << endl; 
    } 
}; 

int main (int argc, char **argv) 
{ 
const char *device = "/dev/video0"; 
if(argc > 1) 
    device = argv[1]; 
Processor proc(true, device); 

proc.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1); 

MyHandler my_handler; 
proc.set_handler(my_handler); 

proc.set_visible(); 
proc.set_active(); 

try { 
    proc.user_wait(); 
} 
catch(ClosedError &e) { 
} 
return(0); 
} 

,我尝试使用shell命令编译它(从维基复制)

g++ -o processor -lzbar processor.cpp 

,这里是我得到的错误:

/tmp/ccex0UN8.o: In function `zbar::throw_exception(void const*)': 
scan.cpp:(.text+0xe): undefined reference to `_zbar_get_error_code' 
/tmp/ccex0UN8.o: In function `zbar::Exception::what() const': 
scan.cpp:(.text._ZNK4zbar9Exception4whatEv[zbar::Exception::what() const]+0x29): undefined reference to `_zbar_error_string' 
/tmp/ccex0UN8.o: In function `zbar::SymbolSet::ref(int) const': 
scan.cpp:(.text._ZNK4zbar9SymbolSet3refEi[zbar::SymbolSet::ref(int) const]+0x1f): undefined reference to `zbar_symbol_set_ref' 
/tmp/ccex0UN8.o: In function `zbar::Symbol::ref(int) const': 
scan.cpp:(.text._ZNK4zbar6Symbol3refEi[zbar::Symbol::ref(int) const]+0x1f): undefined reference to `zbar_symbol_ref' 
/tmp/ccex0UN8.o: In function `zbar::Symbol::get_type_name() const': 
scan.cpp:(.text._ZNK4zbar6Symbol13get_type_nameEv[zbar::Symbol::get_type_name() const]+0x1c): undefined reference to `zbar_get_symbol_name' 
/tmp/ccex0UN8.o: In function `zbar::Symbol::init(zbar::zbar_symbol_s const*)': 
scan.cpp:(.text._ZN4zbar6Symbol4initEPKNS_13zbar_symbol_sE[zbar::Symbol::init(zbar::zbar_symbol_s const*)]+0x1c): undefined reference to `zbar_symbol_get_type' 
scan.cpp:(.text._ZN4zbar6Symbol4initEPKNS_13zbar_symbol_sE[zbar::Symbol::init(zbar::zbar_symbol_s const*)]+0x3a): undefined reference to `zbar_symbol_get_data_length' 
scan.cpp:(.text._ZN4zbar6Symbol4initEPKNS_13zbar_symbol_sE[zbar::Symbol::init(zbar::zbar_symbol_s const*)]+0x47): undefined reference to `zbar_symbol_get_data' 
/tmp/ccex0UN8.o: In function `zbar::SymbolIterator::SymbolIterator(zbar::SymbolSet const&)': 
scan.cpp:(.text._ZN4zbar14SymbolIteratorC2ERKNS_9SymbolSetE[_ZN4zbar14SymbolIteratorC5ERKNS_9SymbolSetE]+0x55): undefined reference to `zbar_symbol_set_first_symbol' 
/tmp/ccex0UN8.o: In function `zbar::SymbolIterator::SymbolIterator(zbar::SymbolIterator const&)': 
scan.cpp:(.text._ZN4zbar14SymbolIteratorC2ERKS0_[_ZN4zbar14SymbolIteratorC5ERKS0_]+0x55): undefined reference to `zbar_symbol_set_first_symbol' 
/tmp/ccex0UN8.o: In function `zbar::SymbolIterator::operator++()': 
scan.cpp:(.text._ZN4zbar14SymbolIteratorppEv[zbar::SymbolIterator::operator++()]+0x24): undefined reference to `zbar_symbol_next' 
scan.cpp:(.text._ZN4zbar14SymbolIteratorppEv[zbar::SymbolIterator::operator++()]+0x57): undefined reference to `zbar_symbol_set_first_symbol' 
/tmp/ccex0UN8.o: In function `zbar::Image::Handler::_cb(zbar::zbar_image_s*, void const*)': 
scan.cpp:(.text._ZN4zbar5Image7Handler3_cbEPNS_12zbar_image_sEPKv[zbar::Image::Handler::_cb(zbar::zbar_image_s*, void const*)]+0x13): undefined reference to   `zbar_image_get_userdata' 
/tmp/ccex0UN8.o: In function `zbar::Image::get_symbols() const': 
scan.cpp:(.text._ZNK4zbar5Image11get_symbolsEv[zbar::Image::get_symbols() const]+0xf): undefined reference to `zbar_image_get_symbols' 
/tmp/ccex0UN8.o: In function `zbar::Processor::Processor(bool, char const*, bool)': 
scan.cpp:(.text._ZN4zbar9ProcessorC2EbPKcb[_ZN4zbar9ProcessorC5EbPKcb]+0x1b): undefined reference to `zbar_processor_create' 
/tmp/ccex0UN8.o: In function `zbar::Processor::~Processor()': 
scan.cpp:(.text._ZN4zbar9ProcessorD2Ev[_ZN4zbar9ProcessorD5Ev]+0xf): undefined reference to `zbar_processor_destroy' 
/tmp/ccex0UN8.o: In function `zbar::Processor::init(char const*, bool)': 
scan.cpp:(.text._ZN4zbar9Processor4initEPKcb[zbar::Processor::init(char const*, bool)]+0x24): undefined reference to `zbar_processor_init' 
/tmp/ccex0UN8.o: In function `zbar::Processor::set_handler(zbar::Image::Handler&)': 
scan.cpp:(.text._ZN4zbar9Processor11set_handlerERNS_5Image7HandlerE[zbar::Processor::set_handler(zbar::Image::Handler&)]+0x25): undefined reference to `zbar_processor_set_data_handler' 
/tmp/ccex0UN8.o: In function `zbar::Processor::set_config(zbar::zbar_symbol_type_e, zbar::zbar_config_e, int)': 
scan.cpp:(.text._ZN4zbar9Processor10set_configENS_18zbar_symbol_type_eENS_13zbar_config_eEi[zbar::Processor::set_config(zbar::zbar_symbol_type_e, zbar::zbar_config_e, int)]+0x24): undefined reference to `zbar_processor_set_config' 
/tmp/ccex0UN8.o: In function `zbar::Processor::set_visible(bool)': 
scan.cpp:(.text._ZN4zbar9Processor11set_visibleEb[zbar::Processor::set_visible(bool)]+0x1d): undefined reference to `zbar_processor_set_visible' 
/tmp/ccex0UN8.o: In function `zbar::Processor::set_active(bool)': 
scan.cpp:(.text._ZN4zbar9Processor10set_activeEb[zbar::Processor::set_active(bool)]+0x1d): undefined reference to `zbar_processor_set_active' 
/tmp/ccex0UN8.o: In function `zbar::Processor::user_wait(int)': 
scan.cpp:(.text._ZN4zbar9Processor9user_waitEi[zbar::Processor::user_wait(int)]+0x16): undefined reference to `zbar_processor_user_wait' 
collect2: ld returned 1 exit status 

我使用Ubuntu 12.04,安装了build-essential和libzbar-dev

PS:我选用了zbar和事业斑马线从已经收集的实例检测更加QR码(例如更inclinated,更小,更噪音等)

+0

至于你的段错误问题:尝试从源码构建最新的库。它有帮助吗?如果没有,你可以提出另一个问题。 – Jarekczek

回答

4

你可以尝试:

g ++ -o processor processor.cpp -lzbar

+0

它的工作原理,但现在的应用程序进入分段错误 – UnableToLoad

+0

您可以使用gdb和调试您的程序 – billz

+0

我想用DDD和输出是:程序接收到的信号SIGSEGV,分段错误。 [切换到线程0xb7ac5b40(LWP 6238)] 0x0804a379在zbar :: Image :: get_symbols(this = 0x0)处/usr/include/zbar/Image.h:242 – UnableToLoad