Windows 上的链接提升要求版本化库

linking boost on Windows asks for versioned lib

提问人:Fabian 提问时间:12/22/2022 更新时间:1/4/2023 访问量:114

问:

我们有一个大型的基于 cmake 的 Linux C++ 项目,我们通过 cmake 外部项目构建提升自己。

该项目还用于在 Windows 上为经典英特尔编译器构建。但是我无法访问此旧的运行配置。

我使用英特尔 oneAPI 2023.0 和基于 LLVM 的 icx 编译器(clang 15?)和当前的 MSVC 社区版。

我使用 --layout=system 构建了没有目标的 boost (1.81.0)(因为我仍在为 openAPI 目标而苦苦挣扎),因此库名称如 libboost_atomic.a

在我们的C++中,我们不让 CMake 搜索 boost,而是通过 target_link_libraries() 添加 boost 库。

当我使用 icx 编译我们的应用程序时,我收到一个链接错误

链接 CXX 可执行文件 ....\bin\cfs.exe LINK: 命令 “C:\PROGRA~2\Intel\oneAPI\compiler\latest\windows\bin\icx.exe /nologo @CMakeFiles\cfs.dir\objects1 /Qoption,link,/machine:x64 /INCREMENTAL:NO /Qoption,link,/subsystem:console -qiopenmp /Qoption,链接,/LIBPATH:C:\PROGRA~2\Intel\oneAPI\compile r\latest\windows\bin\intel64\ifort.exe /Qoption,链接,/LIBPATH:C:\Users\fabia\code\master\release_icx\lib [....]....\lib\libboost_log_setup.lib ....\lib\libboost_serialization.lib [.....] /链接 /out:....\bin\cfs.exe /implib:....\bin\cfs.lib /pdb:C:\Users\fabia\code\master\release_icx\bin\cfs.pdb /版本:0.0 /清单 /清单文件:....\bin\cfs.exe .manifest”

我得到

致命错误 LNK1104: 文件 “libboost_serialization-clangw16-mt-x64-1_81.lib”未找到。

我不知道字符串 clangw16-mt-x64-1_81 是从哪里来的。

Windows Boost 链接器错误 intel-oneapi

评论


答:

1赞 SeshaP-Intel 1/4/2023 #1

可以从命令提示符或在 Visual Studio IDE 中将 boost 库路径中存在的库链接到项目。详情请参阅以下链接。https://www.boost.org/doc/libs/1_81_0/more/getting_started/windows.html

如果找不到任何二进制文件,可以添加宏BOOST_ALL_NO_LIB,告诉配置系统不要自动选择要链接的库。详情请参阅以下链接。https://www.boost.org/doc/libs/1_81_0/libs/config/doc/html/index.html

或者
您可以使用目标 Boost::d isable_autolinking 来禁用自动链接。详情请参阅以下链接。https://cmake.org/cmake/help/latest/module/FindBoost.html

评论

0赞 Fabian 1/13/2023
答案是正确的,而且是有效的。谢谢。对我来说,相关信息是BOOST_ALL_NO_LIB选择。我还必须使用相同的 Windows 版本(例如 /D_WIN32_WINNT=0x0A00)编译 lib 和应用程序