c++ - 使用代码块配置 boost 时出现问题

标签 c++ boost configuration compiler-errors codeblocks

我以前已经配置过 boost,但这次我不知道是什么导致了问题。我提供了一些屏幕截图,显示了我在 CodeBlocks (svn7550) 中的设置。我使用这些命令构建了我的 Boost 库。

Boost解压到F:\,主文件夹地址为:

F:\boost_1_49_0

命令如下:

F:\
F:\ cd Boost_1_44_0
F:\ Boost_1_44_0> bootstrap.bat
F:\ Boost_1_44_0>bjam toolset=gcc --build-type=complete stage

上面没有任何用处所以我写了这个并且实际上编译得很好:

F:\ Boost_1_44_0>bjam variant=debug,release link=static address-model=32 

然后

F:\boost_1_49_0>bjam toolset=gcc variant=debug,release link=static threading=multi address-model=32 --build-type=complete stage

然后当我尝试编译一个线程示例时:

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

void wait(int seconds)
{
  boost::this_thread::sleep(boost::posix_time::seconds(seconds));
}

boost::mutex mutex;

void thread()
{
  for (int i = 0; i < 5; ++i)
  {
    wait(1);
    mutex.lock();
    std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
    mutex.unlock();
  }
}

int main()
{
  boost::thread t1(thread);
  boost::thread t2(thread);
  t1.join();
  t2.join();
}

它因这些错误而失败:

||=== Boost Example, Debug ===|
obj\Debug\main.o||In function `Z6threadv':|
D:\Documents and Settings\Master\My Documents\Projects\Boost Example\main.cpp|18|undefined reference to `_imp___ZN5boost11this_thread6get_idEv'|
obj\Debug\main.o||In function `main':|
D:\Documents and Settings\Master\My Documents\Projects\Boost Example\main.cpp|27|undefined reference to `_imp___ZN5boost6thread4joinEv'|
D:\Documents and Settings\Master\My Documents\Projects\Boost Example\main.cpp|28|undefined reference to `_imp___ZN5boost6thread4joinEv'|
D:\Documents and Settings\Master\My Documents\Projects\Boost Example\main.cpp|28|undefined reference to `_imp___ZN5boost6threadD1Ev'|
D:\Documents and Settings\Master\My Documents\Projects\Boost Example\main.cpp|28|undefined reference to `_imp___ZN5boost6threadD1Ev'|
D:\Documents and Settings\Master\My Documents\Projects\Boost Example\main.cpp|28|undefined reference to `_imp___ZN5boost6threadD1Ev'|
D:\Documents and Settings\Master\My Documents\Projects\Boost Example\main.cpp|28|undefined reference to `_imp___ZN5boost6threadD1Ev'|
F:\boost_1_49_0\boost\thread\win32\thread_data.hpp|161|undefined reference to `_imp___ZN5boost11this_thread18interruptible_waitEPvNS_6detail7timeoutE'|
obj\Debug\main.o||In function `thread<void (*)()>':|
F:\boost_1_49_0\boost\thread\detail\thread.hpp|205|undefined reference to `_imp___ZN5boost6thread12start_threadEv'|
||=== Build finished: 9 errors, 0 warnings (0 minutes, 58 seconds) ===|

虽然上面的线程示例失败了,但这段代码编译得很好:

#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
    using namespace boost::lambda;
    typedef std::istream_iterator<int> in;

    std::for_each(
        in(std::cin), in(), std::cout << (_1 * 3) << " " );
}

这些是我目前的 CB 屏幕截图:

http://upload.ustmb.ir/uploads/13336039464.jpg

http://upload.ustmb.ir/uploads/13336039463.jpg

http://upload.ustmb.ir/uploads/13336039462.jpg

http://upload.ustmb.ir/uploads/13336039465.jpg

这是我的 stage/lib 文件夹的内容:

http://upload.ustmb.ir/uploads/13335642651.jpg

谁能告诉我问题出在哪里?

最佳答案

我使用这个命令来编译 boost:

F:\
F:\ cd Boost_1_44_0
F:\ Boost_1_44_0> bootstrap.bat
F:\ Boost_1_44_0>bjam toolset=gcc --build-type=complete stage variant=debug,release threading=multi link=static 

其余配置相同。我刚刚关注了the guide here 并添加了:

#define BOOST_THREAD_USE_LIB

到我的源代码的第一行,错误消失了。

关于c++ - 使用代码块配置 boost 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022706/

相关文章:

c++ - 如果 std::move 会导致意外复制,则强制编译时错误?

c++ - 在 C++ 中自动绑定(bind) boost::thread?

unit-testing - Grails-使用reCaptcha插件对 Controller 的方法进行单元测试

android - 在计算机实验室环境中安装 Android Studio,学生在 OSX 上登录

configuration - spread 启动后直接退出

c++ - 需要更快地计算(近似)方差

c++ - strdup 的替代品

c++ - 将内存缓冲区写入 std::stringstream

c++ - 如何检查派生类的可调用成员函数是否存在?

c++ - 自 1.56 以来,boost/interprocess/detail/tmp_dir_helpers.hpp 不再出现在 boost 中