1

インターネットで見つけた標準的な Boost::thread の例を作成しようとすると、Boost ヘッダー ファイル thread_data.hpp によって複数のエラーがスローされます。(実際のプログラムでも同じエラーが発生しますが、コードに問題がないことを確認するためにサンプル コードを使用しています。)

これは、boost::thread チュートリアルで見つけたサンプル コードです。

    #include <iostream>
    #include <boost/thread.hpp>
    #include <boost/date_time.hpp>

    void workerFunc()
    {
        boost::posix_time::seconds workTime(3);
        std::cout << "Worker: running" << std::endl;

        // Pretend to do something useful...
        boost::this_thread::sleep(workTime);
        std::cout << "Worker: finished" << std::endl;
    }

    int main(int argc, char* argv[])
    {
        std::cout << "main: startup" << std::endl;
        boost::thread workerThread(workerFunc);
        std::cout << "main: waiting for thread" << std::endl;
        workerThread.join();
        std::cout << "main: done" << std::endl;
        return 0;
    }

これが私のビルドコマンドです:

    mingw32-g++.exe -LC:\projects\boost\lib  -o bin\Debug\Guardian.exe obj\Debug\Scratch.o    -lboost_filesystem-mgw47-mt-1_53 -lboost_date_time-mgw47-mt-1_53 -lboost_system-mgw47-mt-1_53 -lboost_thread-mgw47-mt-1_53

( boost.threadライブラリをリンクしていることに注意してください。)

最初にスローされるエラーは次のとおりです。

    C:\projects\boost\include\boost-1_53\boost\thread\win32\thread_data.hpp|123|undefined reference to `_imp___ZTVN5boost6detail16thread_data_baseE'|

CodeBlocks では、エラーの原因として、ヘッダー ファイル thread_data.hpp の 123 行が指摘されます。

    //#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
            , interruption_handle(create_anonymous_event(detail::win32::manual_reset_event,detail::win32::event_initially_reset))
            , interruption_enabled(true)

ライブラリへのリンクを忘れていませんか? Boost は問題なく使用できましたが、今まではスレッド ライブラリを使用しようとしています。Boost は初めてで、エラーの原因がわかりません。

4

1 に答える 1