MacでPCLビルドエラーへの対処[ld: library not found for]

# TL;DR
パス通す

```sh:~/bashrc
export LIBRARY_PATH=/usr/local/Cellar/flann/1.9.1_7/lib/
```

# はじめに
[Macbook Proにインストール](https://qiita.com/ysuzuki19/items/ab505e7a896d1dcf2949)して満足していたPCL．

「さあ使うぞ！」

と思い立って作成してあったプロジェクトをビルドすることにした.
`cmake`は無事に通り，次に`make`を実行した際に，今まで見たこともないエラーが出てきた．

今回は`-lflann`に対して問題を解決したが，他の

    ld: library not found for -l*

とMacに言われた全ての方に役立つと思う．

しかし，ゴリ押しで解決したため，他の良い方法があれば教えていただけるととても嬉しい．

# 問題
実際の`make`コマンドにたいする出力は，

```:makeの出力
[ 50%] Linking CXX executable proj
ld: library not found for -lflann
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [proj] Error 1
make[1]: *** [CMakeFiles/proj.dir/all] Error 2
make: *** [all] Error 2
```

と出てきた．

    ld: library not found for -lflann

とあり，どうやら`flann`ライブラリが見つからないらしい・・・


## 対処

- まずは`make`を最新版に更新したり，`flann`を再インストールしたりと試した．失敗．
- 再起動を試した．失敗．
- 手動でライブラリを追加．成功．

上記の方法を試したうち，成功した方法のみを記載する．

## 方法
ライブラリ名は`gsl`であるが，[同じ問題を解決しているページ](https://stackoverflow.com/questions/16682156/ld-library-not-found-for-lgsl)を発見した．この手法を試した．

まずは，`flann`の場所を確認．
２通りの方法を記載したが，前者は`Permission denied`なども表示されるため，後者が好ましい．

```:find flann
$ find / -name flann
$ find / -name flann 2>/dev/null
```

これを確認すると，

```:flannの場所を探す
$ find / -name flann 2>/dev/null
/usr/local/include/flann
/usr/local/var/homebrew/linked/flann
/usr/local/opt/flann
/usr/local/Cellar/flann
/usr/local/Cellar/flann/1.9.1_7/include/flann
/Users/username/Library/Logs/Homebrew/flann
```

これを確認して，

    $ export LIBRARY_PATH=/usr/local/Cellar/flann/1.9.1_7/lib/

とパスに追加する．

```:ビルド確認
$ make
[ 50%] Linking CXX executable proj
[100%] Built target proj
```

毎回`export ~`を入力するのは面倒であるため，`~/.bash_profile`に以下を追記

```:~/.bash_profile
export LIBRARY_PATH=/usr/local/Cellar/flann/1.9.1_7/lib/
```

これで，エラーとはおさらばっ！

# おわりに
解決はしたのだが，一つ謎が残った．

後から見直すと，`cmake`と`make`を繋げて行うと以下になり，

```:error
-- Eigen found (include: /usr/local/include/eigen3, version: 3.3.7)
-- Boost version: 1.69.0
-- Found the following Boost libraries:
--   system
--   filesystem
--   thread
--   date_time
--   iostreams
--   serialization
--   chrono
--   atomic
--   regex
-- FLANN found (include: /usr/local/Cellar/flann/1.9.1_7/include, lib: flann;flann_cpp)
-- FLANN found (include: /usr/local/Cellar/flann/1.9.1_7/include, lib: flann;flann_cpp)
** WARNING ** io features related to pcap will be disabled
** WARNING ** io features related to png will be disabled
** WARNING ** io features related to libusb-1.0 will be disabled
-- QHULL found (include: /usr/local/include, lib: optimized;/usr/local/lib/libqhull_p.dylib;debug;/usr/local/lib/libqhull_p.dylib)
-- Found Glew: GLEW;-framework Cocoa
-- looking for PCL_COMMON
-- looking for PCL_KDTREE
-- looking for PCL_OCTREE
-- looking for PCL_SEARCH
-- looking for PCL_SAMPLE_CONSENSUS
-- looking for PCL_FILTERS
-- looking for PCL_2D
-- looking for PCL_GEOMETRY
-- looking for PCL_IO
-- looking for PCL_FEATURES
-- looking for PCL_ML
-- looking for PCL_SEGMENTATION
-- looking for PCL_VISUALIZATION
-- looking for PCL_SURFACE
-- looking for PCL_REGISTRATION
-- looking for PCL_KEYPOINTS
-- looking for PCL_TRACKING
-- looking for PCL_RECOGNITION
-- looking for PCL_STEREO
-- looking for PCL_APPS
-- looking for PCL_OUTOFCORE
-- looking for PCL_PEOPLE
-- looking for PCL_SIMULATION
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/username/pcl/project/build
[ 50%] Linking CXX executable proj
ld: library not found for -lflann
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [proj] Error 1
make[1]: *** [CMakeFiles/proj.dir/all] Error 2
make: *** [all] Error 2
```

となる．`cmake`に対して，

```
-- FLANN found (include: /usr/local/Cellar/flann/1.9.1_7/include, lib: flann;flann_cpp)
-- FLANN found (include: /usr/local/Cellar/flann/1.9.1_7/include, lib: flann;flann_cpp)
```

と`flann見つけたよ`と書かれているのに，
`make`に対しては

```
ld: library not found for -lflann
```

と`-lflannないよ`と言われている．謎である．