C++ Can';t构建Boost 64位动态库,仅静态

C++ Can';t构建Boost 64位动态库,仅静态,c++,boost,dynamic,static,C++,Boost,Dynamic,Static,我最近通过Dreamspark获得了Visual Studio 2010,因此我现在可以编译64位应用程序和库。然后,我用Bjam编译了Boost1.47库,并使用以下行作为输入 .\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个(静态调试、动态调试、静态发布

我最近通过Dreamspark获得了Visual Studio 2010,因此我现在可以编译64位应用程序和库。然后,我用Bjam编译了Boost1.47库,并使用以下行作为输入

.\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


感谢

更改Boost编译方式的选项(与那些只控制b2执行的选项相反)称为“功能”,并且不能在命令行上用破折号代替。在您的示例中,功能包括:

  • 变体
  • 链接
  • 穿线
  • 地址模型
  • 工具集
它生成的库将根据
. lib*.lib是静态库;其他*.lib是对应DLL的导入lib。

我相信您不应该在
链接
地址模型
等选项之前给它双破折号。只需尝试删除所有这些选项上的一个破折号,就收到了一个“无效选项”错误。不过,这一切都适用于32,所以我看不出问题出在哪里。也可能是我安装的C++快车会引起问题吗?@ JAKE6569:巴勃罗是正确的,他意思是删除两个破折号。也就是说,32位的命令行应该是
\b2-a-d0-q-j4-d0 variant=debug,release link=shared,static threading=multi-address model=32 toolset=msvc-10.0
。当你有破折号的时候,这些特性被忽略,默认值被构建。另外,以libboost开头的静态库和后跟相同名称的boost之间的stage目录有什么区别。从技术上讲,根据文档,这些是“特性”,而不是“属性”。:-]@idljarn:文档说:“属性只是(特性、值)对。”我将尝试编辑。。。