无法构建Boost 64位动态库,仅限静态库。

4

我最近通过Dreamspark获得了Visual Studio 2010,因此现在可以编译64位应用程序和库。然后使用以下输入行使用Bjam编译了Boost 1.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没有支持?谢谢。

2
我相信在像“link”、“address-model”等选项之前不应该给它双破折号。 - Pablo
刚试着把它们所有的破折号都去掉了,结果收到了一个“无效选项”的错误提示。虽然32位的可以正常工作,但我看不出问题在哪里。难道是因为我同时安装了C++ Express和Professional版本导致的问题吗? - contrapsych
2
@JAKE6459:Pablo 是正确的,他指的是要删除两个破折号。也就是说,你的 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
1个回答

6
更改Boost编译方式的选项(与仅控制b2执行的选项不同)称为“特性”,在命令行上不能以破折号开头。 在您的示例中,特性是:
  • variant
  • link
  • threading
  • address-model
  • toolset
生成的库将根据Windows上Boost库的命名方案进行命名。 lib * .lib是静态库; other * .lib是相应DLL的导入库。

此外,在以libboost和boost开头的静态库的阶段目录之间有什么区别? - contrapsych
从技术上讲,根据文档,这些是“特征”,而不是“属性”。:-] - ildjarn
@idljarn:文档中说:“属性只是(特征,值)对。” 我会尝试编辑... - Adam Mitz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接