【发布时间】:2020-09-01 08:20:53
【问题描述】:
我正在尝试从源代码构建 Boost,但遇到了一个奇怪的问题。一些 Windows 机器可以很好地编译它,而其他机器即使都运行相同版本的 Visual Studio 也会失败。这在所有使用 Boost 1.62 的机器上都有效,但在 Boost 1.72 上失败了。
这是 Boost 构建命令:
b2 -j${num_processors} -d 0 --layout=versioned architecture=x86 address-model=64 threading=multi
link=shared runtime-link=shared toolset=msvc-14.0 --with-system --with-thread --with-date_time
--with-chrono --with-filesystem --with-atomic variant=debug --prefix=${boost_dir} install
问题似乎是 Boost Thread 未正确配置,因此未生成项目的 .MANIFEST 文件。这是错误输出(见最后一行):
> bin.v2\libs\headers\build\install\boost_headers-config.cmake
> 1 file(s) copied.
> msvc.link.dll bin.v2\libs\thread\build\msvc-14.0\debug\address-model-64\threadapi-win32\threading-multi\boost_thread-vc140-mt-gd-x64-1_72.dll
>
> call "bin.v2\standalone\msvc\msvc-14.0\address-model-64\architecture-x86\msvc-setup.bat" amd64 >nul
> link /NOLOGO /INCREMENTAL:NO /DLL /DEBUG /MACHINE:X64 /MANIFEST /subsystem:console /out:"bin.v2\libs\thread\build\msvc-14.0\debug\address-model-64\threadapi-win32\threading-multi\boost_thread-vc140-mt-gd-x64-1_72.dll"
/IMPLIB:"bin.v2\libs\thread\build\msvc-14.0\debug\address-model-64\threadapi-win32\threading-multi\boost_thread-vc140-mt-gd-x64-1_72.lib"
@"bin.v2\libs\thread\build\msvc-14.0\debug\address-model-64\threadapi-win32\threading-multi\boost_thread-vc140-mt-gd-x64-1_72.dll.rsp"
> if %ERRORLEVEL% NEQ 0 EXIT %ERRORLEVEL%
>
> Creating library bin.v2\libs\thread\build\msvc-14.0\debug\address-model-64\threadapi-win32\threading-multi\boost_thread-vc140-mt-gd-x64-1_72.lib
and object bin.v2\libs\thread\build\msvc-14.0\debug\address-model-64\threadapi-win32\threading-multi\boost_thread-vc140-mt-gd-x64-1_72.exp
>LINK : fatal error LNK1104: cannot open file 'bin.v2\libs\thread\build\msvc-14.0\debug\address-model-64\threadapi-win32\threading-multi\boost_thread-vc140-mt-gd-x64-1_72.dll.manifest'
有什么想法会引发这种情况,或者对我可以进一步调查的内容有什么建议吗?
编辑:我们正在使用 Visual Studio 2015 在 Windows 10 上构建它。
【问题讨论】:
-
已经建好了boost binaries for Visual Studio。也许通过使用预构建的二进制文件,问题可能会得到解决。
-
预构建的二进制文件在我的环境中不是一个选项。
-
您应该提及您正在构建的环境。或者至少解释一下为什么预建的二进制文件不是一个选项。
-
各个行业都有法律要求,所有软件都在隔离网络上运行,并且所有传入的软件都必须从源代码构建。因此,在这种情况下,预构建的二进制文件不是一个选项。
标签: c++ visual-studio boost