4

http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/tutorial/tuttimer1.htmlからブースト チュートリアルの例をコンパイルしようとしています。

私の CMakeLists.txt は次のようになります。

project(boost)
add_executable(timer1 timer1.cpp)
set_target_properties(timer1 PROPERTIES LINK_FLAGS -lboost_system,-lpthread)

cmake で全体をビルドしようとすると、次のようになります。

/var/www/C++/boost/build$ make
-- Configuring done
-- Generating done
-- Build files have been written to: /var/www/C++/boost/build
Scanning dependencies of target timer1
[100%] Building CXX object CMakeFiles/timer1.dir/timer1.cpp.o                                                                                                    
Linking CXX executable timer1                                                                                                                                    
/usr/bin/ld: cannot find -lboost_system,-lpthread                                                                                                                
collect2: ld returned 1 exit status
make[2]: *** [timer1] Błąd 1
make[1]: *** [CMakeFiles/timer1.dir/all] Błąd 2
make: *** [all] Błąd 2

しかし、私が実行すると:

g++ timer1.cpp -lboost_system -lpthread -o timer1

手動で、すべて正常に動作します。誰かが私が間違っていることを指摘してもらえますか?

PS Turning on linker flags with CMakeで説明されているソリューションを使用しようとすると、次の行を cmake に追加します。

set(CMAKE_SHARED_LINKER_FLAGS "-lboost_system,-lpthread")
set(CMAKE_MODULE_LINKER_FLAGS "-lboost_system,-lpthread")
set(CMAKE_EXE_LINKER_FLAGS "-lboost_system,-lpthread")

上記と同じエラーが発生します。

4

2 に答える 2

5

CMake に統合された FindPackage を使用することを強くお勧めします。CMake は、boost と pthread を見つけてくれます。

CMakeLists.txt は次のようになります。

find_package( Boost COMPONENTS thread system filesystem REQUIRED ) #whatever libs you need
include_directories( ${Boost_INCLUDE_DIRS} )
find_package( Threads )

サブフォルダー src 内:

set( LIBS_TO_LINK
    ${Boost_LIBRARIES}
    ${CMAKE_THREAD_LIBS_INIT}
)

target_link_libraries( myApp
    ${LIBS_TO_LINK}
)
于 2012-12-21T19:26:25.130 に答える
2

/usr/bin/ld: -lboost_system、-lpthread が見つかりません

ここでリンカはライブラリを探していますlibboost_system,-lpthread.so。このようなライブラリが UNIX システムに存在することはほとんどありません。

あなたはおそらく欲しい:

set(CMAKE_EXE_LINKER_FLAGS "-lboost_system -lpthread")
于 2012-12-18T06:36:45.770 に答える