質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

6431閲覧

boost::filesystemが利用できない

ktak

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/02/09 13:04

前提・実現したいこと

boost::filesystemを使ってディレクトリを作成するプログラムを書きたいと思っています。
こちらのディレクトリを作成するというところのサンプルプログラムを実行しようとしているのですが以下のようなエラーが出てしまいうまくいきません。

clang: error: linker command failed with exit code 1 (use -v to see invocation)

こちらのエラーが「ライブラリが足りていない」というエラーらしいとはわかったのですが、何が足りていないのか全く見当がつかないという状況です、、(上部のエラーにも検討がついていません)

発生している問題・エラーメッセージ

Undefined symbols for architecture x86_64: "boost::filesystem::detail::create_directory(boost::filesystem::path const&, boost::system::error_code*)", referenced from: _main in sample-903ef4.o "boost::system::system_category()", referenced from: _main in sample-903ef4.o __GLOBAL__sub_I_sample.cpp in sample-903ef4.o "boost::system::generic_category()", referenced from: __GLOBAL__sub_I_sample.cpp in sample-903ef4.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

該当のソースコード

#include <iostream> #include <boost/filesystem.hpp> namespace fs = boost::filesystem; int main() { const fs::path path("dir"); boost::system::error_code error; const bool result = fs::create_directory(path, error); if (!result || error) { std::cout << "ディレクトリの作成に失敗" << std::endl; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/02/09 13:32

まず、boostは正常にインストールされていますか?
ktak

2019/02/09 15:01

/user/local/include/に入っていることは確認できています。他でEigenというライブラリを使っているのですが、こちらも同じ場所にあって、使えてはいるんですよね
iwanote

2019/02/09 15:23

パスは通ってますか?
alphya

2019/02/09 15:37

$ clang++ main.cpp -Wl,/usr/local/lib/libboost_filesystem.a でどうです?
cateye

2019/02/09 15:58 編集

家では、c++ bt.cpp -Wl,/usr/lib/libboost_filesystem.a で、コンパイル&実行できました。  c++ は、clang++のaliasですd^^ 環境:Linux .Mint191 clang version 8.0.0 boost_1_69_0
ktak

2019/02/10 11:13

みなさん回答ありがとうございます。現状は、 g++ -I/usr/local/include sample.cpp -L/usr/local/lib -lboost_filesystem という感じでコンパイルを試みているのですが、やはり、 clang: error: linker command failed with exit code 1 (use -v to see invocation) このエラーが出てきている感じです、、
ktak

2019/02/10 11:13

boostのビルをはしてみました
ktak

2019/02/10 11:24

すみません、 symbol(s) not found for architecture x86_64 このようなエラーも出たままでした
guest

回答2

0

こんにちは。

boostをビルドしていないのではないでしょうか?
boost::filesystemはboostをビルドする必要があります。(ヘッダ・オンリでは使えない。)
Boostライブラリのビルド方法をよく読めば見えてくると思います。ちょっとパラメータが多いのでたいへんですが、慣れれば難しいものではないです。

boostを全部ビルドすると結構時間がかかります。b2に-with-filesystemオプションも与えればfilesystemだけビルドするのであっという間に終わります。
他にsystemもビルドする必要があったような気もするのですが、ちょっと自信がないです。

投稿2019/02/09 16:23

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/02/09 16:40 編集

./b2 install -j8 --prefix=/usr で、1分以下でビルド+インストールできましたw -jにコア数設定が出来ます。・・・ただ、/usr/lib配下でライブラリを探すほうが手間かも?
yumetodo

2019/02/10 02:50

それは locate libboost_filesystem で出てこないかな?
cateye

2019/02/10 04:22

有難うございますmm
Chironian

2019/02/10 04:34

cateyeさん、 boostのフルビルドはかなり前にやったっきりなので、記憶違いだったかも。フォローありがとうございます。 yometodoさん なるほど、確かにlocalも使っているのでsystemを指定していたようです。 boost::localはビルドしなくても Unicode 変換を使えるのですっかり見落としてました。
yumetodo

2019/02/10 05:03

To Chironian ええっと何の話かわかってない、locateコマンドの話をしていたと思ったらlocaleの話がっ!?
Chironian

2019/02/10 05:21

あああ、目が目が~。読み違えてました。orz
guest

0

usr ~/Project/cpp % c++ bt.cpp -Wl,/usr/lib/libboost_filesystem.a
とりあえず、結果のみd^^

cpp

1#include <iostream> 2#include <boost/filesystem.hpp> 3 4namespace fs = boost::filesystem; 5 6int main() 7{ 8 const fs::path path("dir"); 9 10 boost::system::error_code error; 11 const bool result = fs::create_directory(path,error); 12 if (!result) { 13 std::cerr << "ディレクトリの作成に失敗" << std::endl; 14 } 15}

usr ~/Project/cpp % ls
a.out* bt.cpp lno/ mp/
usr ~/Project/cpp % ./a.out
usr ~/Project/cpp % ls
a.out* bt.cpp dir/ lno/ mp/
usr ~/Project/cpp %

投稿2019/02/09 16:08

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問