2013-02-24 32 views
11

Tôi muốn sử dụng thư viện cpp-netlib cho dự án C++. Vì vậy, tôi đã cài đặt thư viện boost với sự trợ giúp của homebrew (OS là Mac OS X 10.8). Sau đó, tôi đã tải xuống cpp-netlib từ trang chủ dự án, sử dụng cmake để tạo Makefile cho g ++ và áp dụng thành công. "thực hiện kiểm tra" đã vượt qua tất cả các thử nghiệm của nó. Sau đó, tôi đã sao chép thư mục include của cpp-netlib vào thư mục boost.Cách liên kết với cpp-netlib

Vì vậy, đây là khi sự cố bắt đầu: Tôi đã cố gắng biên dịch ví dụ đầu tiên của tài liệu http-client nhưng không thể làm cho nó hoạt động. Khi tôi sử dụng

g++ test.cpp -o out -I/usr/local/Cellar/boost/1.53.0/include 
-L/usr/local/Cellar/boost/1.53.0/lib 
-lboost_system-mt -lboost_filesystem-mt -lboost_thread-mt 

tôi nhận được các lỗi này mối liên kết:

Undefined symbols for architecture x86_64: 
    "boost::network::uri::detail::parse(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::network::uri::detail::uri_parts<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)", referenced from: 
     boost::network::uri::uri::parse() in ccs87Dq3.o 
    "boost::network::http::impl::normal_delegate::normal_delegate(boost::asio::io_service&)", referenced from: 
     boost::network::http::impl::connection_delegate_factory<boost::network::http::tags::http_async_8bit_udp_resolve>::new_connection_delegate(boost::asio::io_service&, bool, boost::optional<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::optional<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)in ccs87Dq3.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

Tôi thực sự sử dụng chức năng tìm kiếm nhưng tôi không thể tìm thấy bất kỳ giải pháp cho vấn đề của tôi. Tôi đang làm gì sai?

Cảm ơn rất nhiều!

Trả lời

9

Sau khi xây dựng cpp-netlib (> = 0.9.3) có nên 3 thư viện tĩnh:

libcppnetlib-client-connections.a 
libcppnetlib-server-parsers.a 
libcppnetlib-uri.a 

Khi xây dựng dự án http-client của bạn, bạn nên xác định một đường dẫn thư viện cho cpp-netlib (- L) và thư viện để liên kết (-l) đối với: cppnetlib-urilibcppnetlib-client-connections.

+2

nhờ bạn ví dụ này cuối cùng cũng hoạt động ngay bây giờ! trong trường hợp ai đó có cùng một vấn đề: dưới đây là dòng (sau khi biên soạn các libs bổ sung) cuối cùng đã thực hiện thủ thuật cho tôi: g ++ test.cpp -o out -I/usr/local/Cellar/boost/1.53. 0/include -L/usr/local/Cellar/boost/1.53.0/lib -lboost_system-mt -lboost_filesystem-mt -lboost_thread-mt -lcppnetlib-client-kết nối -lcppnetlib-uri -lcppnetlib-server-parsers -lssl - lcrypto – user1462040

0

Trong trường hợp ai đó gặp sự cố tương tự với studio trực quan, hãy cung cấp đầu vào của thư viện cho trình liên kết.

tính Project> Linker> input>

libcppnetlib-client-connectionsd.lib 
libcppnetlib-urid.lib 

cho cấu hình Debug và

libcppnetlib-client-connections.lib 
libcppnetlib-uri.lib 

cho cấu hình phát hành.

Xác định đường dẫn thư viện ở đây, tài sản

Project> Linker> chung> bổ sung bao gồm thư mục

2

Đây là những gì làm việc cho tôi. Bạn sẽ cần sửa đổi một số phần nhất định để xử lý các phiên bản khác nhau của tăng, các đường dẫn cài đặt khác nhau, v.v.

g++ -o demo \ 
    demo.cpp \ 
    -lcppnetlib-uri \ 
    -lcppnetlib-server-parsers \ 
    -lcppnetlib-client-connections \ 
    -lboost_thread-mt \ 
    -lboost_system-mt \ 
    -lssl \ 
    -lcrypto \ 
    -I/usr/local/include \ 
    -L/usr/local/lib 

Nếu bạn đang viết mã phía máy chủ thì tôi cho rằng bạn cũng sẽ cần phải bao gồm -lcppnetlib-server-parsers.

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