2010-04-10 106 views
0

对于我的学士论文,我正在实现一个分解版本的算法来分解大整数(找到主因式分解)。这在例如RSA密码系统的安全性。我的愿景是,客户端(Linux或Windows)将下载应用程序并计算一些数字(这些数字是独立的,因此适合并行化)。这些数字(经常没有找到)将被发送到主服务器,以收集这些数字。一旦主服务器收集到足够的数字,它就会完成其余的计算,这不容易并行化。Boost :: Asio for C++的问题

无论如何,以技术。我正在考虑使用Boost :: Asio来执行套接字客户端/服务器实现,以便客户端与主服务器进行通信。由于我想为linux和windows编译,所以我认为windows将是最好的开始。于是我下载了Boost库和编译它,因为它在Boost Getting Started page说:

bootstrap

.\bjam

这一切都编译就好了。然后我尝试编译一个来自Asio的教程示例client.cpp,发现(这里..编辑:由于限制,不能发布链接)。我使用Visual C++编译器从Microsoft Visual Studio 2008中,像这样:

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

但我得到这个错误:

/out:client.exe

client.obj

LINK : fatal error LNK1104: cannot open file 'libboost_system-vc90-mt-s-1_42.lib'

任何人有任何想法可能是错误的,或者我怎么可以移动前锋?我一整周都在努力,为C++工作获得一个简单的客户/服务器套接字程序,但没有运气。严重的挫折踢英寸

谢谢你提前。

回答

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

+0

你好,谢谢你的回答。 做加速的全新编译后,我发现有名字很相似,我需要的,例如一些.lib文件: libboost_system-VC90-mt.lib libboost_system-VC90-MT-1_42.lib libboost_system -vc90-mt-gd.lib libboost_system-vc90-mt-gd-1_42.lib 但是没有与它正在抱怨的确切名称无关,它是 libboost_system-vc90-mt-s-1_42.lib。所以我不确定该从哪里出发? -s是否意味着它是一个静态库,如果是这样,我该如何告诉Boost我想要这样编译? 我正在编译一切从命令提示符。 – 2010-04-10 17:49:14

+0

-s表示它正在查找静态链接到C++标准库和运行库的库。要构建这个库,请尝试'bjam link = static link = shared runtime-link = static runtime-link = shared',这应该构建所有可能的组合。 – mch 2010-04-10 21:03:38

+0

感谢mch, 我通过做一个新的解压缩boost,并做booststrap,其次是bjam link = static runtime-link = static。然后我添加了库路径(/ stage/lib /)作为cl的标志。 谢谢! – 2010-04-11 16:23:52