TL;DR
パス通す
export LIBRARY_PATH=/usr/local/Cellar/flann/1.9.1_7/lib/
はじめに
Macbook Proにインストールして満足していたPCL.
「さあ使うぞ!」
と思い立って作成してあったプロジェクトをビルドすることにした.
cmake
は無事に通り,次にmake
を実行した際に,今まで見たこともないエラーが出てきた.
今回は-lflann
に対して問題を解決したが,他の
ld: library not found for -l*
とMacに言われた全ての方に役立つと思う.
しかし,ゴリ押しで解決したため,他の良い方法があれば教えていただけるととても嬉しい.
問題
実際の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
であるが,同じ問題を解決しているページを発見した.この手法を試した.
まずは,flann
の場所を確認.
2通りの方法を記載したが,前者はPermission denied
なども表示されるため,後者が好ましい.
$ find / -name flann
$ find / -name flann 2>/dev/null
これを確認すると,
$ 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
に以下を追記
export LIBRARY_PATH=/usr/local/Cellar/flann/1.9.1_7/lib/
これで,エラーとはおさらばっ!
おわりに
解決はしたのだが,一つ謎が残った.
後から見直すと,cmake
とmake
を繋げて行うと以下になり,
-- 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ないよ
と言われている.謎である.