CMake编译报错LNK1104:无法打开libboost_charconv-vc143-mt-gd-x64-1_87.lib的解决求助
CMake编译报错LNK1104:无法打开libboost_charconv-vc143-mt-gd-x64-1_87.lib的解决求助
大家好,我最近在基于CMake的C++项目中尝试引入boost/mysql.hpp时遇到了链接错误,具体报错信息如下:
fatal error LNK1104: 无法打开文件"libboost_charconv-vc143-mt-gd-x64-1_87.lib"
我已经确认这个缺失的库文件确实存在于Boost安装目录的C:/boost_1_87_0/lib64-msvc-14.3/文件夹下,而且当我注释掉#include <boost/mysql.hpp>后,项目能正常编译链接,说明基础的Boost和OpenSSL配置是没问题的。下面是我的项目相关配置和代码,希望能得到大家的帮助!
项目配置文件(CMakeLists.txt)
cmake_minimum_required(VERSION 3.8) project(MyProject) set(BOOST_ROOT "C:/boost_1_87_0") set(OPENSSL_ROOT_DIR "C:/Program Files/OpenSSL-Win64") list(APPEND CMAKE_PREFIX_PATH "${BOOST_ROOT}") list(APPEND CMAKE_PREFIX_PATH "${OPENSSL_ROOT_DIR}") if (WIN32) set(OpenSSL_USE_STATIC_LIBS TRUE) set(OPENSSL_MSVC_STATIC_RT TRUE) endif() find_package(Boost 1.87.0 REQUIRED COMPONENTS filesystem system) if (Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) endif() find_package(OpenSSL REQUIRED) if (OpenSSL_FOUND) include_directories(${OpenSSL_INCLUDE_DIR}) endif() add_executable(${PROJECT_NAME} InventoryMonitorServ.cpp InventoryMonitorServ.h ) target_link_libraries(${PROJECT_NAME} PRIVATE ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto )
测试代码片段
#include "InventoryMonitorServ.h" #include <boost/asio.hpp> #include <boost/asio/ip/tcp.hpp> #include <boost/mysql.hpp> #include <openssl/sha.h> int main() { std::cout << "Inventory Monitor Service is starting..." << std::endl; return 0; }
CMake配置过程的环境参数(部分)
Параметры среды: 1> CommandPromptType=Native 1> DevEnvDir=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\ 1> ExtensionSdkDir=C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs 1> EXTERNAL_INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.26100.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\cppwinrt 1> Framework40Version=v4.0 1> FrameworkDir=C:\Windows\Microsoft.NET\Framework64\ 1> FrameworkDir64=C:\Windows\Microsoft.NET\Framework64\ 1> FrameworkVersion=v4.0.30319 1> FrameworkVersion64=v4.0.30319 1> INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.26100.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\cppwinrt 1> LIB=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\ATLMFC\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\lib\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.26100.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\\lib\10.0.26100.0\\um\x64 1> LIBPATH=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\ATLMFC\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.26100.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.26100.0;C:\Windows\Microsoft.NET\Framework64\v4.0.30319 1> Path=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCPackages;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\bin\Roslyn;C:\Program Files\Microsoft Visual Studio\2022\Community\Team Tools\DiagnosticsHub\Collector;C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\\x64;C:\Program Files (x86)\Windows Kits\10\bin\\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\\MSBuild\Current\Bin\amd64;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files
我的疑问和求助点
- 是不是因为
boost/mysql.hpp依赖charconv组件,但我在find_package(Boost)时没有显式声明这个组件,导致CMake没有自动链接对应的库? - 会不会是静态库/动态库的配置不匹配?我设置了OpenSSL使用静态库,但Boost的库类型是否需要对应调整?
- 我的Visual Studio 2022使用的是工具集14.44,而Boost的库是vc143版本,这会不会有兼容性问题?
希望有经验的朋友能帮我分析下问题所在,或者给出可行的解决办法,谢谢大家!
内容来源于stack exchange
相关产品推荐
相关产品推荐

