cmakeをビルドツールとして使用するC ++アプリケーションを作成しました。 Debian 7(Wheezy)ではうまく機能しますCMakeLists.txt
が、Debian 8(Jessie)ではうまくいきません。特に、cmakeはブーストライブラリを見つけることができません。関連部分はCMakeLists.txt
次のとおりです。
#find_package( Boost REQUIRED COMPONENTS system program_options date_time )
find_package( Boost REQUIRED )
message( "Boost include dir is ${Boost_INCLUDE_DIRS}" )
message( "Boost library dir is ${Boost_LIBRARY_DIRS}" )
message( "Boost libraries ${Boost_LIBRARIES}" )
出力は次のとおりです
# make rebuild_cache
Running CMake to regenerate build system...
-- Boost version: 1.55.0
Boost include dir is /usr/include
Boost library dir is /usr/lib
Boost libraries
RRDTool library found: TRUE
RRDTool include dir is: /usr/include
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/src/lm50client
ご覧のとおり、出力の4行目は空です(「Boost library」の後にはライブラリがありません)。変数${Boost_LIBRARIES}
が空です。
その行のコメントを外すとfind_package( Boost REQUIRED COMPONENTS system program_options date_time )
、つまり特定のライブラリを指定すると、スクリプトがひどく失敗します。
Boost 1.49を使用しているDebian Wheezyでも同じスクリプトが動作します。私がインストールしたライブラリ:
# aptitude search 'boost'
i libboost-all-dev - Boost C++ Libraries development files (ALL) (default version)
i A libboost-atomic-dev - atomic data types, operations, and memory ordering constraints (default version)
i A libboost-atomic1.55-dev - atomic data types, operations, and memory ordering constraints
i A libboost-atomic1.55.0 - atomic data types, operations, and memory ordering constraints
i A libboost-chrono-dev - C++ representation of time duration, time point, and clocks (default version)
i A libboost-chrono1.55-dev - C++ representation of time duration, time point, and clocks
i A libboost-chrono1.55.0 - C++ representation of time duration, time point, and clocks
i A libboost-context-dev - provides a sort of cooperative multitasking on a single thread (default version)
i A libboost-context1.55-dev - provides a sort of cooperative multitasking on a single thread
i A libboost-context1.55.0 - provides a sort of cooperative multitasking on a single thread
i A libboost-coroutine-dev - provides a sort of cooperative multitasking on a single thread (default version)
i A libboost-coroutine1.55-dev - provides a sort of cooperative multitasking on a single thread
i A libboost-date-time-dev - set of date-time libraries based on generic programming concepts (default version)
i A libboost-date-time1.55-dev - set of date-time libraries based on generic programming concepts
i A libboost-date-time1.55.0 - set of date-time libraries based on generic programming concepts
p libboost-dbg - Boost C++ Libraries with debug symbols (default version)
i A libboost-dev - Boost C++ Libraries development files (default version)
p libboost-doc - Boost.org libraries documentation (default version)
i A libboost-exception-dev - library to help write exceptions and handlers (default version)
i A libboost-exception1.55-dev - library to help write exceptions and handlers
i A libboost-filesystem-dev - filesystem operations (portable paths, iteration over directories, etc) in C++ (default version)
i A libboost-filesystem1.55-dev - filesystem operations (portable paths, iteration over directories, etc) in C++
i A libboost-filesystem1.55.0 - filesystem operations (portable paths, iteration over directories, etc) in C++
p libboost-geometry-utils-perl - Perl module providing bindings to the Boost Geometry library
i A libboost-graph-dev - generic graph components and algorithms in C++ (default version)
i A libboost-graph-parallel-dev - generic graph components and algorithms in C++ (default version)
i A libboost-graph-parallel1.55-dev - generic graph components and algorithms in C++
i A libboost-graph-parallel1.55.0 - generic graph components and algorithms in C++
i A libboost-graph1.55-dev - generic graph components and algorithms in C++
i A libboost-graph1.55.0 - generic graph components and algorithms in C++
i A libboost-iostreams-dev - Boost.Iostreams Library development files (default version)
i A libboost-iostreams1.55-dev - Boost.Iostreams Library development files
i A libboost-iostreams1.55.0 - Boost.Iostreams Library
i A libboost-locale-dev - C++ facilities for localization (default version)
i A libboost-locale1.55-dev - C++ facilities for localization
i A libboost-locale1.55.0 - C++ facilities for localization
i A libboost-log-dev - C++ logging library (default version)
i A libboost-log1.55-dev - C++ logging library
i A libboost-log1.55.0 - C++ logging library
i A libboost-math-dev - Boost.Math Library development files (default version)
i A libboost-math1.55-dev - Boost.Math Library development files
i A libboost-math1.55.0 - Boost.Math Library
i A libboost-mpi-dev - C++ interface to the Message Passing Interface (MPI) (default version)
i A libboost-mpi-python-dev - C++ interface to the Message Passing Interface (MPI), Python Bindings (default version)
i A libboost-mpi-python1.55-dev - C++ interface to the Message Passing Interface (MPI), Python Bindings
i A libboost-mpi-python1.55.0 - C++ interface to the Message Passing Interface (MPI), Python Bindings
i A libboost-mpi1.55-dev - C++ interface to the Message Passing Interface (MPI)
i A libboost-mpi1.55.0 - C++ interface to the Message Passing Interface (MPI)
i A libboost-program-options-dev - program options library for C++ (default version)
i A libboost-program-options1.55-dev - program options library for C++
i A libboost-program-options1.55.0 - program options library for C++
i A libboost-python-dev - Boost.Python Library development files (default version)
i A libboost-python1.55-dev - Boost.Python Library development files
i A libboost-python1.55.0 - Boost.Python Library
i A libboost-random-dev - Boost Random Number Library (default version)
i A libboost-random1.55-dev - Boost Random Number Library
i A libboost-random1.55.0 - Boost Random Number Library
i A libboost-regex-dev - regular expression library for C++ (default version)
i A libboost-regex1.55-dev - regular expression library for C++
i A libboost-regex1.55.0 - regular expression library for C++
i A libboost-serialization-dev - serialization library for C++ (default version)
i A libboost-serialization1.55-dev - serialization library for C++
i A libboost-serialization1.55.0 - serialization library for C++
i A libboost-signals-dev - managed signals and slots library for C++ (default version)
i A libboost-signals1.55-dev - managed signals and slots library for C++
i A libboost-signals1.55.0 - managed signals and slots library for C++
i A libboost-system-dev - Operating system (e.g. diagnostics support) library (default version)
i A libboost-system1.55-dev - Operating system (e.g. diagnostics support) library
i A libboost-system1.55.0 - Operating system (e.g. diagnostics support) library
i A libboost-test-dev - components for writing and executing test suites (default version)
i A libboost-test1.55-dev - components for writing and executing test suites
i A libboost-test1.55.0 - components for writing and executing test suites
i A libboost-thread-dev - portable C++ multi-threading (default version)
i A libboost-thread1.55-dev - portable C++ multi-threading
i A libboost-thread1.55.0 - portable C++ multi-threading
i A libboost-timer-dev - C++ wall clock and CPU process timers (default version)
i A libboost-timer1.55-dev - C++ wall clock and CPU process timers
i A libboost-timer1.55.0 - C++ wall clock and CPU process timers
i A libboost-tools-dev - Boost C++ Libraries development tools (default version)
i A libboost-wave-dev - C99/C++ preprocessor library (default version)
i A libboost-wave1.55-dev - C99/C++ preprocessor library
i A libboost-wave1.55.0 - C99/C++ preprocessor library
i libboost1.55-all-dev - Boost C++ Libraries development files (ALL)
p libboost1.55-dbg - Boost C++ Libraries with debug symbols
i A libboost1.55-dev - Boost C++ Libraries development files
p libboost1.55-doc - Boost.org libraries documentation
i A libboost1.55-tools-dev - Boost C++ Libraries development tools
p pianobooster - learn the piano just by playing a game
p pianobooster-dbg - learn the piano just by playing a game - debug
p shinken-mod-booster-nrpe - Shinken booster-nrpe module
私は何が間違っていましたか?
修正する
問題をもっと絞ってみました。 Debian 7(Wheezy)では、次のような結果が得られます。
# ls -lh /usr/lib/libboost_system*
-rw-r--r-- 1 root root 32K Feb 4 2013 libboost_system.a
lrwxrwxrwx 1 root root 17 Feb 4 2013 libboost_system-mt.a -> libboost_system.a
lrwxrwxrwx 1 root root 25 Feb 4 2013 libboost_system-mt.so -> libboost_system.so.1.49.0
lrwxrwxrwx 1 root root 25 Feb 4 2013 libboost_system.so -> libboost_system.so.1.49.0
-rw-r--r-- 1 root root 14K Feb 4 2013 libboost_system.so.1.49.0
Debian 8(Jessie)で同じことを行うと、次のようになります。
# ls -lh /usr/lib/libboost_system*
ls: cannot access /usr/lib/libboost_system*: No such file or directory
何? !また、Debian Wheezyでlibを提供するパッケージを見つけました。
# dpkg -S /usr/lib/libboost_system.so.1.49.0
libboost-system1.49.0: /usr/lib/libboost_system.so.1.49.0
# dpkg -L libboost-system1.49.0
/.
/usr
/usr/lib
/usr/lib/libboost_system.so.1.49.0
/usr/share
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libboost-system1.49.0
/usr/share/doc
/usr/share/doc/libboost-system1.49.0
/usr/share/doc/libboost-system1.49.0/changelog.Debian.gz
/usr/share/doc/libboost-system1.49.0/NEWS.Debian.gz
/usr/share/doc/libboost-system1.49.0/README.Debian.gz
/usr/share/doc/libboost-system1.49.0/copyright
libboost-system1.55.0
これに相当する、Debian 8(Jessie)に該当バージョンを使用できると思うが、
# dpkg -L libboost-system1.55.0
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.55.0
/usr/share
/usr/share/doc
/usr/share/doc/libboost-system1.55.0
/usr/share/doc/libboost-system1.55.0/copyright
/usr/share/doc/libboost-system1.55.0/changelog.Debian.gz
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libboost-system1.55.0
x86_64-linux-gnu
Debian 8(Jessie)がライブラリをcmakeが見つけることができない他のサブディレクトリに置くことがわかります。私はこれが問題の源だと思います。ただし、cmakeが正しいディレクトリを指すように手動で設定してもBOOST_LIBRARYDIR
機能しません。また、すべてのビルドスクリプトを変更することが正しい解決策になるわけではないので、これは正しい解決策にはなりません。これは、より広範な一般的な問題であるに違いありません。
ベストアンサー1
これは古い質問であることを知っていますが、LD_LIBRARY_PATHでBoost 1.55へのパスを設定してみましたか?
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu