2011-08-26 110 views
3

我最近通过Dreamspark获得了Visual Studio 2010,因此我现在可以编译64位应用程序和库。然后,我用Bjam使用以下行编译了Boost 1.47库以进行输入。无法构建Boost 64位动态库,只有静态

.\b2 -a -d 0 -q -j 4 -d 0 --variant=debug,release --link=shared,static --threading=multi --address-model=32 --toolset=msvc-10.0 

当我这样做,我得到每个库(静态调试,动态调试,静态释放,动态释放)4。 编译完成后,我将它们移动到另一个名为win32libs的目录中。然后,我使用完全相同的行来编译64位版本,但将地址模型切换为64(我知道它们几乎完全相同,因为我从我制作的同一文本文档中复制和过去,以便编译它们变得很容易)。当我在64位编译后进入stage目录时,我只能看到.lib,没有.dll。这是我正在做什么的问题,或者在某种程度上,64位dll不受支持?

感谢

+2

我相信你不应该在像“链接”,“地址模型”等选项之前给它双破折号。 – Pablo

+0

刚刚尝试删除其中的一个破折号,并收到“无效的选项”错误。这一切都与32的工作,所以我不明白是什么问题。难道它也是我有C++ express安装在一边专业可能会导致问题? – contrapsych

+2

@ JAKE6459:巴勃罗是正确的,他的意思是删除**两个**破折号。也就是说,你的32位命令行应该是'。\ b2 -a -d 0 -q -j 4 -d 0 variant = debug,release link = shared,static threading = multi address-model = 32 toolset = msvc- 10.0'。当你有破折号时,这些功能被简单地忽略,并且默认是建立的。 – ildjarn

回答

6

这种变化如何加速编译(而不是那些只控制B2的执行)的选项被称为“功能”,必须不被命令行上破折号preceeded。在你的榜样的特点是:

  • 变种
  • 链接
  • 线程
  • 地址模型
  • 工具集

它产生将根据 library naming scheme for Boost on Windows被命名为库。 lib * .lib是静态库;其他* .lib是相应DLL的导入库。

+0

另外,以libboost和boost开头并且后跟相同名称的静态库之间的stage目录有什么不同。 – contrapsych

+0

从技术上讲,根据文档,这些是“特征”,而不是“属性”。 : - ] – ildjarn

+0

@idljarn:文档说:“一个属性只是一个(特征,值)对。”我会尝试编辑... –