使用VS2017编译资源DLL时遇数学函数未解析符号问题求助
链接C++标准库数学函数时出现LNK2019未解析符号错误的解决方法
问题背景
我尝试使用Visual C++ 2017编译器编译一个仅含资源的DLL文件,使用的命令行如下:
cl test.cpp /link /dll /noentry "E:\CXGE\build\Debug\CXGE.lib"
其中test.cpp包含基础函数与数学运算逻辑,但当调用std::sin、std::cos、std::abs等C++数学函数时,出现了如下链接错误:
test.obj : error LNK2019: unresolved external symbol fabs referenced in function "double __cdecl abs(double)" (?abs@@YANN@Z)
我使用的是Windows 10系统,编译环境为X64 Native tools command prompt for VS 2017。
错误原因分析
在Visual Studio的编译链中,C++标准库的数学函数(比如std::abs(double)底层依赖的fabs函数)属于**通用C运行时库(UCRT)**的范畴。当我们手动指定链接参数时,如果没有显式告诉链接器要链接UCRT对应的库文件,链接器就无法找到这些数学函数的实现符号,从而抛出LNK2019错误。
解决方法
在链接选项中添加libucrt.lib即可解决该问题,修改后的完整命令行如下:
cl test.cpp /link /dll /noentry "E:\CXGE\build\Debug\CXGE.lib" libucrt.lib
内容的提问来源于stack exchange,提问作者nuclearc
相关产品推荐
相关产品推荐

