2017-11-18 11 views
0

MacOS 10.13.1を実行しているMacBook Proを使用しています。次を使って自作を経由してインストールブースト:Boostライブラリがリンクに失敗するのはなぜですか?

brew install boost --build-from-source 

私のコード以下の通りです:

#include <iostream> 
#include <boost/filesystem.hpp> 

namespace boostfs = boost::filesystem; 

int main(int argc, char* argv[]) 
{ 
    if (argc <= 1) 
{ 
    std::cerr << "Usage: " << argv[0] << " <filename>" << std::endl; 
    return 1; 
} 

boostfs::path p(argv[1]); 

if (boostfs::exists(p)) 
{ 
    std::cout << "File " << p << " exists." << std::endl; 
} 
else 
{ 
    std::cout << "File " << p << " does not exist." << std::endl; 
} 

    return 0; 
} 

私が受けていますエラーは以下の通りです:

Undefined symbols for architecture x86_64: 
"boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)", referenced from: 
    boost::filesystem::exists(boost::filesystem::path const&) in chkfile-c30777.o 
    "boost::system::system_category()", referenced from: 
    ___cxx_global_var_init.2 in chkfile-c30777.o 
    "boost::system::generic_category()", referenced from: 
    ___cxx_global_var_init in chkfile-c30777.o 
    ___cxx_global_var_init.1 in chkfile-c30777.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [chkfile] Error 1 

私は、コードを実行しました端末はmakegcc 7.2.0です。

私は次のことを試みた:

g++ -std=c++17 -I /usr/local/include/ chkfile.cpp -o chkfile 

と新しいエラーました:

Undefined symbols for architecture x86_64: 
"boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)", referenced from: 
boost::filesystem::exists(boost::filesystem::path const&) in cce7HDO8.o 
"boost::system::system_category()", referenced from: 
    __static_initialization_and_destruction_0(int, int) in cce7HDO8.o 
"boost::system::generic_category()", referenced from: 
    boost::system::error_category::std_category::equivalent(int, std::error_condition const&) const in cce7HDO8.o 

boost::system::error_category::std_category::equivalent(std::error_code const&, int) const in cce7HDO8.o 
    __static_initialization_and_destruction_0(int, int) in cce7HDO8.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 

は私が間違って何をやっているの?

+0

をリンクされていることを確認してください?正確なテキストをコピーして質問に貼り付けてください。 –

+0

コードをビルドおよびリンクするためにどのようなコマンドを使用しましたか?プロンプトで 'make 'と打ち込んで、最高のものを欲しいですか?ほとんどのMakefileは、実行中のコンパイルコマンドとリンクコマンドをエコーし​​ます。コンソールの出力は何を表していますか? – PaSTE

+0

私はエラーを追加しました。また、私は単にコマンドラインから 'make'を実行しています。 –

答えて

0

は、このよう

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

ファイルシステムを含め、あなたがどのようなエラーを見ているあなたは、適切なライブラリに

-lboost_system -lboost_filesystem 
関連する問題