2010-10-14 79 views
6

Tôi đang làm việc trên một dự án C++ nơi tôi muốn sử dụng thư viện tuần tự hóa của boost. Tôi đã tải xuống và cài đặt các thư viện tăng mới nhất từ ​​trang chủ của Boost.Trợ giúp biên dịch và sử dụng thư viện boost C++

Khi tôi cố gắng biên dịch và chạy một trong những ví dụ bản demo serialization tăng, tôi có tất cả các loại lỗi mà trông như thế này:

/usr/local/include/boost/archive/detail/iserializer.hpp:173: undefined reference to `boost::archive::archive_exception::~archive_exception()' 
./demo.o: In function `void boost::archive::detail::save_non_pointer_type<boost::archive::text_oarchive>::save_standard::invoke<bus_schedule::trip_info>(boost::archive::text_oarchive&, bus_schedule::trip_info const&)': 
/usr/local/include/boost/archive/detail/oserializer.hpp:253: undefined reference to `boost::archive::detail::basic_oarchive::save_object(void const*, boost::archive::detail::basic_oserializer const&)' 
./demo.o: In function `void boost::archive::save_access::end_preamble<boost::archive::text_oarchive>(boost::archive::text_oarchive&)': 
/usr/local/include/boost/archive/detail/oserializer.hpp:83: undefined reference to `boost::archive::detail::basic_oarchive::end_preamble()' 
./demo.o: In function `void boost::archive::detail::load_pointer_type<boost::archive::text_iarchive>::invoke<bus_route*>(boost::archive::text_iarchive&, bus_route*&)': 
/usr/local/include/boost/archive/detail/iserializer.hpp:518: undefined reference to `boost::archive::detail::basic_iarchive::load_pointer(void*&, boost::archive::detail::basic_pointer_iserializer const*, boost::archive::detail::basic_pointer_iserializer const* (*)(boost::serialization::extended_type_info const&))' 
./demo.o: In function `void boost::archive::detail::save_pointer_type<boost::archive::text_oarchive>::non_polymorphic::save<bus_route>(boost::archive::text_oarchive&, bus_route&)': 

Tôi mới đến C++ và thúc đẩy vì vậy bất kỳ trợ giúp sẽ được đánh giá cao .

Cảm ơn

+0

@ user475505 lỗi liên kết. kiểm tra xem bạn đã thêm libs cho liên kết chưa. – yadab

Trả lời

5

Cảm ơn tất cả mọi người vì sự giúp đỡ của bạn. Cuối cùng tôi đã giải quyết được vấn đề của mình, mặc dù giải pháp của tôi khá chống lại thời tiết, và có lẽ không phải là thông tin.

Tôi đã cố gắng cài đặt các thư viện tăng theo cách thủ công, bằng cách tải chúng trực tiếp từ trang web của Boost và thấy rằng tất cả các thư viện đã được cài đặt trong/usr/local/lib và/usr/local/include/boost /. Sau khi liên tục chạy vào các lỗi ban đầu của tôi, tôi quyết định xem liệu Trình quản lý gói Synaptic có thể thực hiện công việc 'tốt hơn' trong việc cài đặt các thư viện tăng cường hay không. Tôi đã chọn 'libboost1.40-all-dev' để cài đặt mọi thứ, nhưng vẫn không có gì hoạt động.

Cuối cùng, tôi quyết định bắt đầu mới để xóa thư mục/thư mục/usr/local/include theo cách thủ công và tôi đã xóa tất cả các tệp libboost trong/usr/local/lib. Sau đó tôi đã đánh dấu tất cả các thư viện tăng để loại bỏ hoàn toàn để xóa mọi thứ. Khi tất cả các thư viện boost đã được gỡ cài đặt, tôi đã quay lại Synaptic Package Manager, chọn 'libboost1.40-all-dev' một lần nữa.

Tôi không chắc chắn chính xác những gì đã thay đổi khi tôi cài đặt lại các thư viện một lần nữa, nhưng mọi thứ bắt đầu hoạt động trở lại. Lần đầu tiên tôi thử nghiệm từ dòng lệnh và cố gắng biên dịch demo.cpp từ trang web của boost một lần nữa bằng lệnh sau:

g++ demo.cpp -lboost_serialization 

và nó được biên dịch ngay lập tức. Chạy tệp thực thi được hiển thị chính xác kết quả tôi đang tìm kiếm. Hơn nữa, tôi đã chuyển tệp này trở lại dự án Eclipse của tôi, thêm 'boost_serialization' vào thư viện Linker và cố gắng xây dựng dự án. Mọi thứ hoạt động hoàn hảo một lần nữa, vì tôi có thể xây dựng dự án và chạy mã ví dụ. Tôi không thực sự có một lời giải thích cho lý do tại sao điều này khắc phục được vấn đề của tôi, nhưng với bất kỳ ai gặp vấn đề tương tự, lời khuyên tốt nhất tôi có thể cung cấp là KHÔNG cài đặt thư viện boost trực tiếp, mà là có trình quản lý Gói Synaptic mọi điều.

Cảm ơn mọi người một lần nữa, bạn đã vô cùng hữu ích.

1

Bạn cần liên kết đến thư viện Boost.Serialization. Xem Boost đang bắt đầu page.

12

Có lẽ bạn cần liên kết đến thư viện tuần tự hóa. Có một cái nhìn trong /usr/lib cho một cái gì đó có tên tương tự như libboost_serialization. Sau đó nói với g++ (bạn không nói trước với các trình biên dịch bạn đang sử dụng), bạn muốn sử dụng (liên kết đến) thư viện này:

g++ main.cpp -lboost_serialization

Tức là nếu tên của thư viện là /usr/lib/libboost_serialization.a, bạn hãy bỏ qua số lib và tiện ích mở rộng ban đầu.

Chúc may mắn!

+0

Cảm ơn bạn đã trả lời nhanh, tôi vẫn gặp sự cố, nhưng tôi nghĩ rằng ít nhất tôi đang đi đúng hướng. Tôi quên đề cập đến trong bài viết gốc rằng tôi đang sử dụng CDT Eclipse để phát triển. Tôi nghĩ rằng cả hai đều ở ngay trong vấn đề liên kết, vì vậy sau khi tìm kiếm thêm một chút, tôi đã tìm thấy một bài viết về việc thiết lập tăng tốc trong nhật thực nơi tôi phải thêm boost_serialization vào trường thư viện cài đặt trình liên kết. Sau khi làm điều này, tôi vẫn nhận được các lỗi tương tự. Bất kỳ lời khuyên nào khác về cách tôi có thể thiết lập tăng cường với Eclipse? Cảm ơn – Swaraj

+0

Hãy thử xem những thông số dòng lệnh Ecplips đang chuyển tới g ++. Sau đó, đảm bảo rằng phần liên kết là chính xác (bạn có thể thử chạy lệnh bên ngoài Ecplipse). Đăng nó ở đây nếu bạn không nhận được chuyển tiếp. –

+0

Tôi vẫn gặp sự cố, đây là lệnh liên kết mà Eclipse đang sử dụng: "g ++ -o" Testbench "./demo.o -lboost_serialization" Tôi nhận được lỗi tương tự từ dòng lệnh bên ngoài Eclipse. Cảm ơn sự giúp đỡ của bạn cho đến nay – Swaraj

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