问题标签 [boost-system]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1247 浏览

winapi - 如何获取英文的 boost::system::error_code::message?

在具有本地化 UI 的 Win7 上,error_code::message()返回非英文消息。据我所见(在 Boost 1.54 中,for system_error_category),上述函数归结为以下 WinAPI 调用:

如何让上面FormatMessage返回一个英文消息?我试图设置语言环境,无论是使用std功能还是使用SetThreadLocale- 它都没有帮助。

更新:只是澄清一下:本质上,我的问题是如何以编程方式“覆盖”用户默认语言以及为什么设置区域设置是不够的。

0 投票
1 回答
1298 浏览

c++ - boost-asio 错误消息使用的编码是什么?

我正在使用 boost-asio,我想正确处理错误消息。

在这个例子中,我打了一个错字(1278 而不是 127):

我收到一条错误消息,它似乎是在 Windows 1252 中编码的(我使用的是 Windows 7)。所以看起来编码是操作系统编码。

但是,我找不到任何说明这一事实的文件。

boost asio 中的错误消息是否使用 OS 字符集编码?

0 投票
1 回答
606 浏览

boost - 在 DLL 中静态链接 Boost System 以便在另一个程序中使用

我目前正在尝试编写一个用于另一个程序的 DLL。在这个 DLL 中,我使用了 boost::thread 中需要 boost::system 的条件变量。我想静态链接 boost 库,以便我的程序只需要我的 dll 而不需要 boost。

我能够静态链接线程库,这样我就不需要为我的程序提供 boost 线程 dll。但是,我无法使用 boost::system 进行静态链接。到目前为止,只有当我动态链接它时它才会起作用。静态地,编译程序时出现以下编译错误

这是构建 dll 时的控制台输出

这是构建测试程序时的控制台输出

如果我将以下文件链接到我的测试程序,它将编译

我发现很多线程与我的错误有关,但只有那些涉及将 boost::system 链接到项目的线程。我想避免这种情况,只将 boost::system 链接到我的 DLL

如何正确链接所有内容,以便我不需要将 boost 系统链接到我的测试程序,只链接到我的 DLL?我正在使用代码块,boost 1.53 和 MinGW 4.4.1

提前致谢

0 投票
1 回答
408 浏览

xcode - 在 Xcode 6 项目中静态链接 Boost Thread 1.56 lib

我有一个非常简单的 Xcode 6 项目,我试图在其中静态链接到 boost_thread 和 boost_system。我已经构建了库(我有 libboost_thread.a 和 libboost_system.a),我已经包含了所有正确的标头/库搜索路径、标志等,就像我对项目中的任何其他静态库所做的那样,并且项目成功构建,但是当我运行它时,它给了我一个运行时 dlopen 错误,它找不到 boost_thread.dylib 库?!

我没有链接到任何 boost lib 的任何 dylib 版本,只有这两个静态版本。为什么要尝试动态加载库?谁能给我一个关于这一切的提示?

谢谢

0 投票
1 回答
1243 浏览

c++ - 尽管与 boost_system 链接,但未定义对 boost::system::generic_category 的引用

我的编译命令是:

g++ -I/home/foo/boost_1_56_0 -L/home/foo/boost_1_56_0/stage/lib -lboost_system -lboost_filesystem -lpthread -lboost_thread -lboost_system -lboost_filesystem -lpthread -lboost_thread main.cpp foo.cpp

boost::system::generic_category尽管我将它与-lboost_thread.

我还得到未定义的引用:

boost::system::generic_categorypthread_detach

0 投票
1 回答
1169 浏览

c++11 - 使用 gcc 4.9.2 提升 1.57 文件系统/系统链接器错误

我正在构建一个 api 库并将其用作 unittest 项目的共享库。api正在通过以下方式进行一些调用

然后单元测试只是调用该函数,但由于链接器错误,我无法构建它

但是我的 CMakeList.txt 已正确设置

并且使 VERBOSE=1 也是正确的

在开始使用 boost::filesystem 之前我没有遇到任何问题。这在 VS2013 上工作得很好,但在使用 GCC 4.9.2 的 linux 上我似乎不知道为什么。起初我以为 boost 版本可能是错误的(ubuntu 只提供 1.55,而我在 windows 上使用的是 1.57)所以我也在 linux 上构建了 1.57,但错误仍然存​​在。还有一个与 c++11 相关的boost 错误,但它已在 1.57 中修复

我看过关于这个主题的类似问题,但人们大多忘记链接到 boost_system 而我没有。

0 投票
0 回答
151 浏览

c++ - 使用 Visual Studio 提升 1.44 asio 链接器问题

我正在尝试在 Visual Studio 2005 中构建一个需要 Boost 1.44.0 的项目(我知道它很旧,但我必须使用这些版本)。我已经用 bjam 构建了它,正如它在 VS 2005 命令提示符中的以下行中提到的那样:

我已经将我的库路径设置为:

并包括:

但是当我尝试构建整个解决方案时,链接过程会引发以下错误:

我认为生成的库必须缺少某些东西,但我不知道是什么(也许我在生成 Boost Libs 时缺少命令输入?)。我知道Asio依赖于System,但libboost_system已经生成。我尝试在/stage/lib的库中搜索,但找不到函数getaddrinfo 。

0 投票
1 回答
1497 浏览

c++ - Boost.Asio 调用返回了哪些 Boost 错误代码/条件?

我目前正在编写一个使用 Boost.Asio 作为底层套接字 API 的 TCP I/O 工具,我注意到Boost.Asio 似乎缺乏关于每个单独操作可能导致哪些特定 Boost 错误代码/条件的文档(例如函数/方法调用或异步操作)。我能找到的只是错误代码 API 和一些非正式的错误代码列表,它们都没有将特定代码与特定操作相关联

这种明显缺乏文档令人沮丧,因为当您不知道可能的故障模式时,很难编写健壮的代码。甚至无法举出例子,因为由于缺乏文档,我什至不确定哪些操作可能会出现哪些问题。

相比之下,POSIX 套接字 API 在记录故障模式方面相当不错。特别是,它列出了每个函数调用可以生成的 errno 和返回值。

这个 Boost.Asio 文档是否存在于某个地方,而我只是没有看到它?或者我应该只是猜测、逆向工程或收集有关 Boost.Asio API 各个部分的故障模式的经验数据,以便能够编写使用它的健壮代码?

0 投票
1 回答
1414 浏览

c++ - 类型为 errc::timed_out 的 boost 系统 make_error_code 具有“未知错误”的消息

为什么以下代码输出“未知错误”?我期待一些其他消息,例如“操作超时”或其他描述性错误。

操作系统:Windows 7 提升:1.57

0 投票
1 回答
1591 浏览

c++ - 比较 boost::system::error_category

以下比较因错误而失败,该错误为 errorCode.category().name() 输出“asio.misc”,为 errorCode.message() 输出“文件结尾”

如果它声称属于 asio.misc 类别,那么为什么 (errorCode.category() == boost::asio::error::misc_category ) 的 if 条件评估为 false?

谷歌搜索(包括这里的答案)说 boost::system::error_code 可以在多个类别中具有相同的值,所以我假设为了获得正确的消息和含义,我们必须比较 boost::system::error_category以及 boost::system::error_code::value。

如果这不起作用,我们如何正确比较类别?

有问题的代码:


编辑:

根据https://theboostcpplibraries.com/boost.systemBoost::file_system:检查错误代码

人们通常错误地编写代码只比较错误值而不是类别。单独的错误值不是唯一的,并且可能出现在多个类别中。用户还可以自由创建自己的错误代码和类别。因此,必须对两者进行比较。我认为这不会影响大量应用程序,因为无论如何他们只使用一个特性或库来提升他们的项目和/或大多数错误代码都映射到 Windows 错误代码,尽最大努力不碰撞。

我不得不在另一台计算机上访问 boost 邮件列表,因为我的工作几乎阻止了所有内容。

http://boost.2283326.n4.nabble.com/Compare-boost-system-error-category-td4692861.html#a4692869

据那边的一个家伙说,比较失败的原因是因为boost库是静态链接的,而boost::system::error_category::operator ==比较地址,所以LHS是一个lib中的地址,RHS是另一个地址。当他们被期望的时候,他们不会是平等的。

使用 operator == 的地址对我来说似乎是一个非常愚蠢的举动。如果发现任何新知识,我将继续在 boost 邮件列表上大肆宣传它并在这里为其他人编辑。

现在,我正在动态链接并使用表单

但是,当我静态链接以提升时,这也不起作用。如果有人对我们如何正确比较 boost::system::error_code 并获得预期结果有任何更多建议,请让我们深入了解。