0

GCC 4.73 を搭載した Ubuntu 13.04 で CMake を使用して Boost ASIO の例をコンパイルしようとしています。

http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/example/cpp11/echo/blocking_tcp_echo_client.cpp

http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp

次の CMake ファイルを使用します。

cmake_minimum_required(VERSION 2.8)

ADD_DEFINITIONS(-std=c++11)
project(server)

find_package( Boost 1.53.0 REQUIRED system)
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )

add_executable( server server.cpp )
target_link_libraries(server ${Boost_LIBRARIES} )

add_executable( client client.cpp )
target_link_libraries(client ${Boost_LIBRARIES})

プロジェクトは C++11 を使用し、プラットフォームに依存しない必要があります。CMakefile を使用してコンパイルすると、次のような結果が得られます

undefined reference to `pthread_join'

私の同僚はまったく同じ Makefile を問題なくコンパイルできます。

質問: CMake または Boost で PThreads を使用せずに C++11 スレッドを使用して、プラットフォームに依存しないようにする方法はありますか?

編集: サーバーは問題なくコンパイルされますが、クライアントのみに問題があります。

4

1 に答える 1

5

CMake または Boost で PThreads を使用せず、C++11 スレッドをプラットフォームに依存しないようにする方法はありますか?

いいえ、Boost.Threads と GCC の C++ スレッド ライブラリはどちらも、Pthreads 上のかなり薄いレイヤーとして実装されています。

では、私の同僚の Linux マシンで同じ make ファイルを使用して動作するのはなぜでしょうか? おそらく、彼のコンパイラは自動的に pthread をリンクしますか?

--enable-libstdcxx-time=rtC++ 標準ライブラリをlibrtおよびにリンクさせるGCC を構成することができますlibpthread。つまり-pthread、 とリンクする必要がないため、同僚がそのように構成された GCC を使用している可能性があります。libpthread.soへの自動リンクは、C++ 標準ライブラリの一部を使用するシングルスレッド プログラムのパフォーマンスに悪影響を及ぼすため、この構成オプションはデフォルトではありません。

于 2013-09-11T19:31:12.637 に答える