2016-01-26 26 views
13

私はboost::filesystem::copy_fileが私に問題を起こす理由を知りません。C++ BOOST `boost :: filesystem :: detail :: copy_fileへの未定義の参照

私は、ソースブーストのコードまたはそのhelpからのインスピレーションを得なかっ

// 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; 
} 

COPY_FILEブースト::ファイルシステム::詳細:: `への未定義参照:

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);} 

をそのようなsimple exampleでも私のためには動作しません。

プラットフォーム:Linux Ubuntu 64この問題の回避策はあり

+0

'-std = C++ 11'がなければコンパイルできますか? –

+1

yestです。私はちょうど[このバグ](https://svn.boost.org/trac/boost/ticket/10038)を見つけた – ar2015

+0

新しいバージョンをダウンロードしてチェックします。 – ar2015

答えて

14

#include <boost/filesystem.hpp> 

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

を交換するか、好ましくは、お使いのコンパイラフラグに

+0

このコードで置き換えるものは何ですか? 'boost/filesystem.hpp'は既に含まれています。 – ar2015

+2

これはODR違反のためのものです。 'BOOST_NO_CXX11_SCOPED_ENUMS'を定義する場合は、それをグローバルに定義する必要があります。 – ildjarn

0

Iを-DBOOST_NO_CXX11_SCOPED_ENUMSを追加ファイルをコンパイルできませんでしたヘッダーboost/filesystem.hppのどちらかを編集してください。これは私がそれを解決した方法です。私は、boost/filesystem.hppという行と、Boostを使用していたすべての行をコメントアウトし、ファイルをコンパイルしました。私はその後、ファイル内のすべての行のコメントを外して再度コンパイルし、それがうまくいった。私は両方の時間-lboost_system旗でコンパイルしていた!

関連する問題