Ubuntu 12.10(リポジトリ経由でインストールされたlibboost)でCMake2.8.9およびBoost1.49を使用してプログラムをコンパイルするときに問題が発生します。現在、プログラムはいくつかの共有ライブラリと実行可能ファイル(まだライブラリを使用していません)です。実行可能ファイルはboost::program_options
、入力を解析するために使用します。
これは次のようにレイアウトされています(共有ライブラリやインクルードなど、より多くのディレクトリがありますが、CMakeにはまだ機能していません):
src
|- tools
| |- CMakeLists.txt
| |- main.cpp <-- main executable
|- CMakeLists.txt
手動でコンパイルすると機能しますが、CMakeすると、一部のテキストが破損し、最後にsegfaultが発生します。これまでのプログラムコードは、ドキュメントの「最初の」プログラムです(ここでprogram_options
確認できます)。
私が使用した手動コンパイルコマンドは次のとおりです。
g++ -Wall -o myapp src/tools/main.cpp -lboost_program_options
これにより、正しい出力が得られますmyapp --help
。
Allowed options:
--help produce help message
--compression arg set compression level
CMakeファイルは次のようになります。
# src/CmakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(testApp CXX)
FIND_PACKAGE( Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ADD_DEFINITIONS(-g -O2
-fsigned-char -freg-struct-return
-Wall -W -Wshadow -Wpointer-arith -Wcast-qual -Winline -Werror)
ADD_SUBDIRECTORY(tools)
# src/tools/CmakeLists.txt
ADD_EXECUTABLE(main main.cpp)
TARGET_LINK_LIBRARIES(main
${Boost_LIBRARIES})
#rename to the final outut name
SET_TARGET_PROPERTIES(main
PROPERTIES OUTPUT_NAME myapp)
次に実行するmyapp --help
と、次の出力が得られます。
,@:
--help produce help message
--compression arg set compression level
Segmentation fault (core dumped)
「@」記号は、「 `」、「�」、Unicode-codepoints-in-boxesなど、他の記号に変わることがよくあります。これは、ジャンクメモリを印刷していることを意味します。
このCMakeのセットアップで何が間違っていますか?