Boost :: Asio for C ++的问题

时间:2010-04-10 14:19:20

标签: boost boost-asio distributed-computing

对于我的单身汉论文,我正在实现一个分解版本的算法,用于分解大整数(找到素数因子分解)。这适用于例如RSA密码系统的安全性。

我的愿景是,客户端(Linux或Windows)将下载应用程序并计算一些数字(这些是独立的,因此适合并行化)。这些数字(经常不常见)将被发送到主服务器,以收集这些数字。一旦主服务器收集了足够的数字,它将完成剩余的计算,这是不容易并行化的。

无论如何,对技术细节。我正在考虑使用Boost :: Asio来执行套接字客户端/服务器实现,以便客户端与主服务器进行通信。因为我想为linux和windows编译,我认为windows会像任何一样开始。所以我下载了Boost库并对其进行了编译,正如它在Boost Getting Started page上所说的那样:

  

自举

     

\的bjam

这一切都很好。然后我尝试编译一个教程示例,client.cpp,来自Asio,发现(这里..编辑:因为限制而无法发布链接)。我正在使用Microsoft Visual Studio 2008中的Visual C ++编译器,如下所示:

  

cl / EHsc / I D:\ Downloads \ boost_1_42_0 client.cpp

但是我收到了这个错误:

  

/out:client.exe

     

client.obj

     

LINK:致命错误LNK1104:无法打开文件'libboost_system-vc90-mt-s-1_42.lib'

任何人都知道可能出现什么问题,或者我怎么能继续前进?我整个星期都在尝试,为c ++工作获得一个简单的客户端/服务器套接字程序,但没有运气。踢的严重挫折。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

构建失败的原因是它无法找到包含boost系统的库文件。 Boost包含一个“方便”的自动链接功能,这样当你包含一个二进制libaray的头文件(而不是一个只有头文件库)时,boost会自动告诉编译器它应该在库中链接。这样做的缺点是boost不会告诉编译器在哪里找到库。

简短的回答是在增强入门指南中进一步阅读。此页面显示如何将必要的标志添加到编译器命令行:Getting started on windows: linking from the command line

您要做的第一件事就是找到.lib文件。 Boost将它们隐藏在深层目录结构中,因此从您运行bjam的目录开始搜索它。记下文件所在的目录。您可能还希望使用bootstrap --prefix=/some/install/locationbjam install在您构建它的源目录以外的地方安装boost。

您是使用Visual Studio解决方案还是在命令行上构建项目?

如果您使用的是解决方案文件,请在解决方案属性中找到链接页面。应该有一个框,您可以在其中输入其他库路径。将.lib文件所在的目录添加到此框中。

如果您在命令链接上使用cl,请熟悉cllink的命令行选项。您可以使用cl选项/link将命令传递给链接器,并且您要查找的链接器命令是/libpath