【问题标题】:C++ linker error using Boost Thread使用 Boost Thread 的 C++ 链接器错误
【发布时间】:2013-04-14 12:19:20
【问题描述】:

尝试构建我在 Internet 上找到的标准 Boost::thread 示例,我收到了 Boost 头文件 thread_data.hpp 引发的多个错误,我没有直接链接到该文件,但我认为它是由 Boost 链接的。 (我在实际程序中也遇到了同样的错误,但我使用示例代码来确保我的代码没有问题。)

这是我在 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

(请注意,我 am 正在链接 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 新手,不知道是什么导致了错误。

【问题讨论】:

  • 我刚刚使用 MinGW-32 从命令行构建了您的示例,并且构建得很好。我用过:g++ main.cpp -IC:\Dev\lib2\mingw32\boost\boost1530 -LC:\Dev\lib2\mingw32\boost\boost1530\lib -o main.exe -lboost_filesystem-mgw47-mt-d-1_53 -lboost_date_time-mgw47-mt-d-1_53 -lboost_system-mgw47-mt-d-1_53 -lboost_thread-mgw47-mt-d-1_53。您是否尝试过从命令行构建它?
  • 另一个问题 - 你是静态链接还是动态链接?如果你是静态链接,你可能需要#define BOOST_THREAD_USE_LIB
  • 使用我上面提到的编译器命令从命令行构建它会产生相同的错误,只是在命令控制台中而不是在 CodeBlocks 中。
  • 我的 Boost 库有问题吗?我自己建立了它们,我可能做错了什么,现在才出现。
  • 您是否保存了构建 Boost 时的输出(我通常将其重定向到带有 &gt; boost_install.log 2&gt;&amp;1 的文件)?如果你这样做了,你可以看看它,看看在构建过程中是否有任何错误。我在 Boost 上从来没有遇到过很多问题,但我从构建 Qt 的经验中知道,构建过程的成功结束并不意味着一切顺利。

标签: c++ boost boost-thread


【解决方案1】:

尝试将 -lpthread 添加到链接器。

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 2012-03-23
    • 2011-09-28
    • 2021-07-03
    • 2012-08-12
    • 2012-07-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    相关资源
    最近更新 更多