2016-01-26 14 views
13

Tôi không biết tại sao boost::filesystem::copy_file đang gây rắc rối cho tôi.C++ BOOST undefined tham chiếu đến `boost :: filesystem :: detail :: copy_file

tài liệu tham khảo không xác định cho `boost :: hệ thống tập tin :: chi tiết :: copy_file

// g++ -std=c++11 test.cpp -lboost_filesystem -lboost_system -lrt -lboost_wave 

#include <boost/filesystem.hpp> 

int main() 
{ 

    boost::filesystem::create_directory("aaa"); 
    // ok 


    boost::filesystem::copy_file("f1","f2"); 
    // /tmp/ccNWZltB.o: In function `boost::filesystem::copy_file(boost::filesystem::path const&, boost::filesystem::path const&)': 
    // test.cpp:(.text._ZN5boost10filesystem9copy_fileERKNS0_4pathES3_[_ZN5boost10filesystem9copy_fileERKNS0_4pathES3_]+0x26): undefined reference to `boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*)' 
    // collect2: error: ld returned 1 exit status 


    return 0; 
} 

tôi đã không có cảm hứng từ mã nguồn của tăng hoặc help của nó:

inline 
    void copy_file(const path& from, const path& to, // See ticket #2925 
       BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec) 
             {detail::copy_file(from, to, option, &ec);} 

Ngay cả như vậy simple example không hoạt động cho tôi.

Hệ điều hành: Linux Ubuntu 64

+0

Không có '-std = C++ 11' nó biên dịch? –

+1

yest it. Tôi chỉ tìm thấy [lỗi này] (https://svn.boost.org/trac/boost/ticket/10038) – ar2015

+0

Tôi sẽ tải xuống và kiểm tra phiên bản mới. – ar2015

Trả lời

14

Có một cách giải quyết cho vấn đề này, thay thế

#include <boost/filesystem.hpp> 

với

#define BOOST_NO_CXX11_SCOPED_ENUMS 
#include <boost/filesystem.hpp> 
#undef BOOST_NO_CXX11_SCOPED_ENUMS 

Hoặc, tốt, thêm -DBOOST_NO_CXX11_SCOPED_ENUMS để cờ biên dịch của bạn

+0

Điều gì sẽ thay thế bằng mã này? 'boost/filesystem.hpp' đã được bao gồm. – ar2015

+2

Đây chỉ là cầu xin vi phạm ODR. Nếu bạn định xác định 'BOOST_NO_CXX11_SCOPED_ENUMS', bạn cần xác định nó trên toàn cầu. – ildjarn

0

tôi không thể biên dịch một tệp bao gồm includ ed tiêu đề boost/filesystem.hpp. Đây là cách tôi giải quyết nó: Tôi nhận xét ra dòng boost/filesystem.hpp và tất cả các dòng đã được sử dụng Boost, và sau đó biên soạn các tập tin. Sau đó tôi uncommented tất cả các dòng trong các tập tin và biên dịch một lần nữa, và sau đó nó làm việc. Tôi đã biên dịch với cờ -lboost_system cả hai lần!

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