0

This is a very specific problem, - I apologize for that.

I've been building a graphical real-time application using Direct3D 11. I started it on the Win7 OS. I then upgraded to Win10 and when I tried compiling the solution again, the linker barfed like it had caught the plague for silicon microchips.

It spews out Unresolved symbols in objects that don't even use the given functions.

  • __imp__wassert
  • strlen
  • fabs
  • __imp__CrtDbgReportW
  • sprt
  • and more

I've concluded that the majority of the functions in question is mostly C functions. I'm aware that the c functions are no longer included in the C++ headers and libraries, so I made sure to include all the relevant C-libraries explicitly.

I've read and followed the solutions of some of most of the other folks having problems with Windows 10 screwing their code. one of them is this : Upgraded to Windows 10 and now WAMP won't work

I also tried actually telling the linker where to look for the -lib-files, in case the compiler or project missed the memo.

On my PC, the location for the Direct3D libs is here: C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\um\arm64

As you can see, I am trying to force it to use Win10 lib versions in case this was a requirement.

I started in one end to try and catch myself doing something stupid:

  • I looked for full include paths to see it this had started an avalanche: FAILED
  • I tried removing the /ZI compiler option: FAILED
  • Relinking the DirectX libs to all different version one at the time: FAILED
  • Explicitly include the vcrumtime.lib to the additional linker libs: SUCCESS (removed half the errors)
  • Create An entirely new project and include everything from scratch: FAILED
  • Add MSVCRTD.lib : FAILED
  • Change the target platform to 64bit: FAILED
  • Tried including stdio.h in certain independant tool classes: FAILED
  • Tried including Winmm.lib in the linker: FAILED

I've roamed the internet for what feels like a decade (only a month irl) to find some solution, but nothing.

I hope some of you have an idea of what noobiness I might have committed.

All suggestions will help.

Community
  • 1
  • 1
Silverback
  • 39
  • 7
  • Specific questions are _great_! Sadly, this is actually not one of them. Time for a [MCVE]... – Lightness Races in Orbit Jul 25 '16 at 22:58
  • `__imp__wassert` Are you compiling for Unicode? `__imp__CrtDbgReportW` Is this a `_DEBUG` build? `um\arm64` Is your target platform ARM64? `include the vcrumtime.lib` Are you linking the `CRT` statically or dynamically (`/MT[d]` or `/MD[d]`)? `I've read and followed the solutions of some of most of the other folks having problems` Honestly I think you've made matters worse by indiscriminately trying random things. Better try to roll back *all* your attempted "fixes", then post what the *original* issue was - with full details. – dxiv Jul 26 '16 at 00:31

1 Answers1

1

Most likely you are linking with a static library that is not compatible with VS 2015 because it uses the Universal CRT. For example, the legacy DirectX SDK library DXERR.LIB fails to link when using VS 2015. Make sure you rebuild all your code with VS 2015 and avoid the use of static libraries build for other versions of Visual C++.

You also won't be able to get your project to link and run on an x86 or x64 PC linking with the 64-bit ARM libraries.

You do not need to use the Windows 10 SDK for Win32 desktop apps, although you certainly can.

Chuck Walbourn
  • 38,259
  • 2
  • 58
  • 81
  • Thanks a lot! You can tell I am a complete novice when it comes to instruction sets and ground level architecture on chips. I redid the procedure of importing all the files into a new Win32 Windows project again and this fixed most of my issues. I then refit the project to match my requirements, but ultimately, your answer helped me immensely! What was part of the problem was that I tried to tell the linker where to find the libraries. I deleted this (set it to inherit.. ) and VS did the rest. – Silverback Jul 26 '16 at 16:52