2011-12-28 27 views
7

Tôi đã cài đặt tăng trên ubuntu 10.04 bằnglỗi liên kết trong program_options mã với thúc đẩy thư viện trên ubuntu

sudo apt-get install libboost-dev 

Tôi nghĩ rằng sau đó tôi không cần phải thiết lập bất kỳ -I và -L cờ, vì vậy tôi biên dịch của tôi code của

g++ test.cpp 

đây là test.cpp tôi

#include <iostream> 
#include <string> 
#include <set> 
#include <sstream> 

#include <boost/config.hpp> 
#include <boost/program_options/detail/config_file.hpp> 
#include <boost/program_options/parsers.hpp> 

namespace pod = boost::program_options::detail; 

int main() 
{ 
    //contents 
    std::stringstream s(
      "a = 1\n" 
      "b = 2\n" 
      "c = test option\n"); 
    //parameters 
    std::set<std::string> options; 
    options.insert("a"); 
    options.insert("b"); 
    options.insert("c"); 

    //parser 
    for (pod::config_file_iterator i(s, options), e ; i != e; ++i) 
    { 
     std::cout << i->value[0] << std::endl; 
    } 
} 

tôi nghĩ mọi thứ sẽ suôn sẻ nhưng trên thực tế có một số lỗi :

/tmp/ccNQEbJM.o: Trong chức năng boost::program_options::detail::basic_config_file_iterator<char>::basic_config_file_iterator(std::basic_istream<char, std::char_traits<char> >&, std::set<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool)': a.cpp:(.text._ZN5boost15program_options6detail26basic_config_file_iteratorIcEC1ERSiRKSt3setISsSt4lessISsESaISsEEb[boost::program_options::detail::basic_config_file_iterator<char>::basic_config_file_iterator(std::basic_istream<char, std::char_traits<char> >&, std::set<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool)]+0x24): undefined reference to boost :: program_options :: details :: common_config_file_iterator :: common_config_file_iterator (std :: set, std :: allocator>, std :: less, std :: allocator> >, std :: cấp phát, std :: cấp phát>>> const &, bool)' a.cpp :(. text._ZN5boost15program_options6detail26basic_config_file_iteratorIcEC1ERSiRKSt3setISsSt4lessISsESaISsEEb [boost :: program_options :: chi tiết :: basic_config_file_iterator :: basic_config_file_iterator (std :: basic_istream> &, std :: set, std :: allocator>, std :: less, std :: allocator>>, std :: allocator, std :: allocator>>> const &, bool)] + 0x5f): tham chiếu không xác định boost::program_options::detail::common_config_file_iterator::get()' /tmp/ccNQEbJM.o: In function boost :: eof_iterator> :: increment() ': a.cpp :(. Text._ZN5boost12eof _iteratorINS_15program_options6detail27common_config_file_iteratorENS1_12basic_optionIcEEE9incrementEv [boost :: eof_iterator> :: increment()] + 0x10): tài liệu tham khảo không xác định để boost::program_options::detail::common_config_file_iterator::get()' /tmp/ccNQEbJM.o: In function boost :: program_options :: chi tiết :: basic_config_file_iterator :: getline (std :: basic_string, std :: cấp phát> &): a.cpp :(. text._ZN5boost15program_options6detail26basic_config_file_iteratorIcE7getlineERSs [boost :: program_options :: chi tiết :: basic_config_file_iterator :: getline (std :: basic_string, std :: allocator> &)] + 0x5b): undefined tham chiếu đến `boost :: program_options: : to_internal (std :: basic_string, std :: allocator> const &) ' collect2: ld trả về 1 trạng thái thoát

Tôi không thể tìm ra nơi và tại sao tôi đã đi sai.

+2

Bạn không bao giờ liên quan đến các thư viện tăng. Bạn cần phải xác định các tùy chọn '-l' thích hợp. –

+0

bằng cách nào? Tôi cài đặt tăng bởi sudo apt-get install libboost-dev. Tôi không xuống thư viện đâu. Tôi chỉ định bằng "g ++ test.cpp -lboost-program_options" nhưng không tải được lboost-program_options. – light13

+0

Đó là tất cả dấu gạch dưới, bạn có một '-' sau khi tăng mà nên là '_' – fefe

Trả lời

15

Bạn cần phải liên kết vào thư viện program_options Boost như không phải mọi thứ trong Boost là mẫu tinh khiết:

[email protected]:/tmp$ cat bpoex.cpp 
#include <iostream> 
#include <string> 
#include <set> 
#include <sstream> 

#include <boost/config.hpp> 
#include <boost/program_options/detail/config_file.hpp> 
#include <boost/program_options/parsers.hpp> 

namespace pod = boost::program_options::detail; 

int main() 
{ 
    //contents 
    std::stringstream s(
      "a = 1\n" 
      "b = 2\n" 
      "c = test option\n"); 
    //parameters 
    std::set<std::string> options; 
    options.insert("a"); 
    options.insert("b"); 
    options.insert("c"); 

    //parser 
    for (pod::config_file_iterator i(s, options), e ; i != e; ++i) 
    { 
     std::cout << i->value[0] << std::endl; 
    } 
} 
[email protected]:/tmp$ g++ -o bpoex bpoex.cpp -lboost_program_options 
[email protected]:/tmp$ ./bpoex 
1 
2 
test option 
[email protected]:/tmp$ 
+0

/usr/bin/ld: không thể tìm thấy -lboost_program_options collect2: ld trả về 1 trạng thái thoát vì sao tôi không thể liên kết boost_program_options? – light13

+4

Tôi biết tôi đã bỏ lỡ ở đâu. Thật xấu hổ khi "sudo apt-get install libboost-dev" không cài đặt program_options của thư viện. Tôi cần phải cài đặt nó bằng "sudo apt-get libboost-program-options-dev". Sau đó, tôi có thể sử dụng "g ++ test.cpp -lboost_program_options" để biên dịch như những gì bạn vừa làm. Cảm ơn Dirk, David, fefe. – light13

+4

"sudo apt-get install libboost-all-dev" sẽ cài đặt tất cả các thư viện tăng. – dimitri

Các vấn đề liên quan