我有一个项目想要导入库。当我这样做(从库导入 .lib 文件)并且调用库中的任何函数时,我会收到以下错误:
"C:\Uz\myproj.vcxproj" (default target) (1) ->(Link target) ->
aziotsharedutil.lib(consolelogger.obj) : error LNK2005: printf already defined in msvcrtd.lib(MSVCR120D.dll) [C:\Uz\myproj.vcxproj]
aziotsharedutil.lib(socketio_win32.obj) : error LNK2005: _vsnprintf_l already defined in msvcrtd.lib(MSVCR120D.dll) [C:\Uz\myproj.vcxproj]
uamqp.lib(amqpvalue_to_string.obj) : error LNK2005: _vsnprintf_l already defined in msvcrtd.lib(MSVCR120D.dll) [C:\Uz\myproj.vcxproj]
C:\Dz\myproj.vcxproj\myproj.dll : fatal error LNK1169: one or more multiply defined symbols found [C:\Uz\myproj.vcxproj]
0 警告 4 个错误
有谁知道我该如何解决这个问题? 我的项目中导入了以下库:
msvcprtd.lib
msvcrtd.lib
kernel32.lib
ole32.lib
aziotsharedutil.lib //imported Library .lib file
uamqp.lib //imported Library .lib file
eventhub_client.lib //imported Library .lib file
Advapi32.lib
Crypt32.lib
Ws2_32.lib
Secur32.lib
ucrt.lib
vcruntime.lib
注1
作为静态链接库.lib 构建的所有 3 个项目都具有相同的多线程调试 DLL (/MDd) 设置,与我的项目相同。
谢谢!
使用相同版本的编译器编译,解决了我的问题!
对于其他面临这个问题并失去理智的人来说——这里有一个轶事。
在我的特定情况下,gawk 源拒绝在 MSVC 下构建并出现此错误,直到我添加
#include <stdio.h>
作为 pc/regex.c
的第一行。
我从构建中排除了源文件,以隔离导致它的源。很多文件可能看起来“受到影响”,但最终排除了
pc/regex.c
由于“printf 和朋友”似乎受到了影响,我想也许文件中后面的某些内容发生了冲突。我在文件的开头添加了
#include <stdio.h>
,在其他包含之前,这至少解决了问题。
我暂时没有进一步调查。