Share via


Update from VS2010 C++ to VS2017 get Link 1104 error, can’t find MSVCURT.lib

Question

Tuesday, January 15, 2019 4:56 PM

NO NORMAL CUT AND PASTE AVAILABLE?? I've used the insert code to state the problem.

I developed a program 9-10 years ago for the Navy using VS2005. While I’ve gone on to better and greater things, I’ve been called upon at various times to maintain/modify this software. One of the last times was in 2012 using VS2010. I’ve just recently been called on to investigate adding some modifications. We now have VS2017. I was able to right click on the solution to convert it into a form that VS2017 could handle but when I attempted to compile, I got the error in the subject line. It seems that there is a problem updating a “.vcxproj” file.
I did a search and MSVCURT.lib does exist, so one problem must be telling the compiler where it is.

The SDK Version is 10.0.17134.0. Platform toolset is v141.

In various searches, I came across the following piece of info:

msvcurt.lib
Deprecated Static library for the pure managed CRT.
/clr:pure

msvcurtd.lib
Deprecated Static library for the Debug version of the pure managed CRT. Not redistributable.
/clr:pure

Wonderful. What do I do about this?

Some things I’ve tried unsuccessfully:
(1) Go into project properties and linker. Select additional library directories and inherit from parent or project defaults. RESULT – nothing.
(2) Looked at compiler options but couldn’t figure out which options I should change.

Basic problem is clearly that VS2017 is not backward compatible with VS2010.

Machine I’m using is on Navy RTD&E (research development test & evaluation) system. I have only user privileges. If anything needs to be downloaded or the like, I have to work through the IT people.

If one were steeped in all of the intricacies of the Visual Studio C++ family of software for the past 10 years or so, it might be possible to figure this out. I’m not.

Help appreciated.

All replies (9)

Thursday, January 17, 2019 7:17 PM ✅Answered

With respect, this is not helpful. Both I and the Navy want an existing application that works to continue to work without spending large amounts of the taxpayers' money to rewrite it. Practically, I don't care whether the code is "pure" or not. To me, that is a Microsoft jargon word.

To restate my question: What is the minimum amount of work needed to get this code to compile? Do I have to use a particular include file? Is there some collection of system functions/methods that I have to use? It can't be this complicated for someone with technical competence in this Microsoft tool to be able to understand what is going on and offer a fix to a customer of the product. In my case, I'm just a user, the customer is Uncle Sam.

Then change the Common Language Runtime option from /clr:pure to /clr.  If it builds, then its time to commence testing.


Thursday, January 17, 2019 8:18 PM ✅Answered | 1 vote

Many thanks! I can now compile. There is now a warning and I'd like to get rid of it. Here's what it says:

Link: /LTCG specified but no code generation required; remove /LTCG from the link command line to improve performance.

I assume there is some linker option this relates to but what this is and what needs to be changed I don't know.

Ordinarily, in a release build the default project properties general options will look like this -

and the Linker Optimization options will look like -

Change the general properties to this -

and so then the Linker optimization options should appear as -


Tuesday, January 15, 2019 5:15 PM

From /en-us/cpp/build/reference/clr-common-language-runtime-compilation?view=vs-2017

  • pure

    /clr:pure is deprecated. The option is removed in Visual Studio 2017. We recommend that you port code that must be pure MSIL to C#.

In the VS2017 IDE you can set the related options from the project properties --


Tuesday, January 15, 2019 6:05 PM

Content Removed


Wednesday, January 16, 2019 11:20 PM

> Wonderful. What do I do about this?

Debug runtime libraries (those with 'd suffix) never have been redistributable. Who left them over in their projects, got what they deserve.

Maybe you should find a contractor (a.k.a. consultant) to help with porting the project. And move on to the cool things.

-- pa


Thursday, January 17, 2019 6:47 PM

With respect, this is not helpful. Both I and the Navy want an existing application that works to continue to work without spending large amounts of the taxpayers' money to rewrite it. Practically, I don't care whether the code is "pure" or not. To me, that is a Microsoft jargon word.

To restate my question: What is the minimum amount of work needed to get this code to compile? Do I have to use a particular include file? Is there some collection of system functions/methods that I have to use? It can't be this complicated for someone with technical competence in this Microsoft tool to be able to understand what is going on and offer a fix to a customer of the product. In my case, I'm just a user, the customer is Uncle Sam.


Thursday, January 17, 2019 6:55 PM

Thanks. Unfortunately, I had already tried this - there is no toolset other than VS 2017 available. I've requested the IT people find an only VS 2010 version and install it on my machine. I haven't heard back yet but my assumption is that the Information Assurance (IA) people and a host of others at the Fleet level will say, VS 2017 is what is supported and earlier versions may not be installed.

I suspect that had someone had the foresight (I suppose it would have had to be me) that "legacy systems" would need to freeze all the development/maintenance tools and petitioned the IA bureaucracy to grant some sort of a waiver that would make this possible. Assuming this process could have even been negotiated, I would be surprised if a waiver would have been granted, given that it would have been necessary to make a convincing case that Microsoft would have a tool that essentially has limited or no backward compatibility.


Thursday, January 17, 2019 7:39 PM

Many thanks! I can now compile. There is now a warning and I'd like to get rid of it. Here's what it says:

Link: /LTCG specified but no code generation required; remove /LTCG from the link command line to improve performance.

I assume there is some linker option this relates to but what this is and what needs to be changed I don't know.


Friday, January 18, 2019 3:49 PM

Thanks very much. This worked.