由于liburctd.lib和libmmt.lib之间的冲突,我收到了一个链接器错误。为什么我会得到这个是另一个问题。
在试图弄清楚这一点时,我想看看设置/NODEFAULTLIB(或-nodefaultib)是否有效。
我尝试了三种不同的添加方式(使用三个不同的库来区分错误,斜线/破折号/大写字母/引号都没有区别):
set_target_properties(SA PROPERTIES LINK_FLAGS -nodefaultlib:libcmt.lib)
target_link_options(SA PUBLIC -nodefaultlib:libmmt.lib)
target_link_libraries(SA PUBLIC -nodefaultlib:liburctd.lib)
使用详细命令运行显示:
LINK: command "C:\PROGRA~2\Intel\oneAPI\compiler\latest\bin\icx.exe /nologo @CMakeFiles\SA.rsp /Qoption,link,/machine:X86 /Qoption,link,/debug /Qoption,link,/INCREMENTAL /Qoption,link,/subsystem:console -nodefaultlib:libcmt.lib -nodefaultlib:libmmt.lib /link /out:SA.exe /implib:SA.lib /pdb:SA.pdb /version:0.0 /MANIFEST:EMBED,ID=1" failed (exit code 1169) with the following output:
icx: warning: unknown argument ignored in clang-cl: '-nodefaultlib:liburctd.lib' [-Wunknown-argument]
icx: warning: unknown argument ignored in clang-cl: '-nodefaultlib:libcmt.lib' [-Wunknown-argument]
icx: warning: unknown argument ignored in clang-cl: '-nodefaultlib:libmmt.lib' [-Wunknown-argument]
libucrtd.lib(log_impl.obj) : error LNK2005: __CIlog already defined in libmmt.lib(log_iface_c99.obj)
libucrtd.lib(pow_impl.obj) : error LNK2005: __CIpow already defined in libmmt.lib(pow_iface_c99.obj)
专注于指挥的重要部分:
... -nodefaultlib:libcmt.lib -nodefaultlib:libmmt.lib /link /out:SA.exe ...
我在某个地方读到过这样一句话:nodefaultib是一个需要出现的标志
之后
/link
事实上,使用以下命令手动运行该命令
-nodefaultlib:libmmt.lib
之后
/链接
让我的程序链接很好!
发生了什么,为什么会发生,我做错了什么?
昨天我一直在寻找4个小时的大部分时间,但无论如何都找不到
任何东西
关于这件事。
(如果有人能解决我的链接器错误,奇怪的是,这种错误发生在我的32位调试版本中,但在我的64位版本中没有,我们也非常感激)