I'm getting a linker error because of a conflict between liburctd.lib and libmmt.lib. Why I'm getting that is a whole other question.
In trying to figure that out, I wanted to see if just setting /NODEFAULTLIB (or -nodefaultlib) worked.
I've tried three different ways of adding it (with three different libraries to be able to distinguish the errors, slashes/dashes/uppercase/quotes all don't make a difference):
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)
Running with verbose commands shows me:
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)
Focusing in on the important part of the command:
... -nodefaultlib:libcmt.lib -nodefaultlib:libmmt.lib /link /out:SA.exe ...
I read somewhere that -nodefaultlib is a flag that needs to come after /link
And indeed, running the command manually with -nodefaultlib:libmmt.lib after /link makes my program link just fine!
What is happening, why is it happening, what am I doing wrong?
I've been looking for the better part of 4 hours yesterday and I can't for the life of me find anything at all about this.
(If someone has a solution for my linker error, which oddly enough occurs in my 32 bit debug build but not in my 64 bit one, that's also much appreciated)