【问题标题】:including boost library, prevent print to console包括boost库,防止打印到控制台
【发布时间】:2020-12-31 04:54:18
【问题描述】:

我安装了 boost 库,我想对其进行测试。我构建并运行以下项目。但我有一个问题。当我构建项目时:

Info: Internal Builder is used for build 

g++ -std=c++0x "-IC:\\boost\\include\\boost-1_68" -O0 -g3 -Wall -c -fmessage-length=0 
     -o "src\\MyTestProject.o" "..\\src\\MyTestProject.cpp" 

g++ "-LC:\\boost\\lib\\" -o MyTestProject.exe "src\\MyTestProject.o" -lws2_32 
     -llibboost_iostreams-mgw63-mt-x32-1_68 
     -llibboost_filesystem-mgw63-mt-x32-1_68 
     -llibboost_system-mgw63-mt-x32-1_68 

Build Finished. 0 errors, 0 warnings. 

在我单击运行项目后:“信息:没有为 MyTestProject 构建任何内容”并且它不会向 MyTestProject.exe 控制台打印任何内容。

如果我注释掉 ,它会打印“Hello world!”。问题是什么?我在 Windows 上使用 mingw-64、eclipse CDT、boost_1_68_0。谢谢!

#include <iostream>
#include <boost/asio.hpp>
//#include <boost/date_time/posix_time/posix_time.hpp>
using namespace std;
int main()
{
  //boost::asio::io_context io;
  //boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  //t.wait();

  cout << "Hello world!" << std::endl; 
  return 0;
}

【问题讨论】:

  • 我的第一步是尝试从控制台构建它(使用 eclipse 记录的命令),看看会发生什么。
  • 我有,但没有错误@john
  • 那么你在运行程序的时候会得到错误返回吗?我能想到的唯一解释是,您的程序在有机会打印任何内容之前就崩溃了,并且可能是在某些 boost 库初始化自身时发生的。
  • 是的,约翰,谢谢。我找到了解决方案。它找不到 .dll 文件。我将它添加到项目中并且它可以工作。谢谢@john

标签: c++ eclipse boost boost-asio eclipse-cdt


【解决方案1】:

我找到了解决方案。我将 libboost_system-mgw63-mt-d-x32-1_68.dll 文件添加到我的项目目录(..\Users\workspace\MyTestProject)。实际上,我已经将 -L c:\boost\lib 和 -l libboost_system-mgw63-mt-d-x32-1_68 添加到链接器中。还将 boost 添加到 PATH 中。我不知道为什么它找不到dll,但现在我用这种方式解决了问题。

【讨论】:

  • 那么,你明白发生了什么吗?问题不在于控制台输出没有发生。相反,问题是整个程序无法启动。有多种方法可以将 DLL 与您的应用程序一起分发,但将它们与可执行文件放在同一目录中是迄今为止最简单的方法。
【解决方案2】:

当您打印到控制台并立即返回时,控制台可能会消失,而您没有机会阅读任何内容。之后尝试阅读来自cin 的确认。 另外,你应该总是说if (cout),否则你不知道流是否失败。

【讨论】:

  • 我试试这个,但我再次得到相同的结果。如果我不包含 asio.hpp,它会完美运行。但如果我包含 asio.hpp,程序将终止,我无法传递 cin 值;
  • 您永远不能将值传递给cin,它会将值传递给您。
猜你喜欢
  • 2020-01-04
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 2016-04-28
  • 1970-01-01
相关资源
最近更新 更多