MFC CRT Order Linker Problem - mfc

I have exactly the problem described here (i'm getting those linker errors when trying to add MFC to my project):
http://support.microsoft.com/?scid=kb%3Ben-us%3B148652&x=8&y=9
however - if I follow the solution and enter
nafxcwd.lib; libcmtd.lib
into 'ignore libraries' as well as 'additional dependencies', then i'll get a
fatal error LNK1104: Cannot open File "nafxcwd.lib;"
what could be the problem? Thanks!

Did you forget to add these libs to Object/library edit box? Or 'additional dependencies' is what used to be "Object/library modules" in Visual Studio 6.0 ?

You should add ";$(LibraryPath)" into Project Properties -> VC++ Directories menu Library Directories item.

Related

Fatal error LNK1104: cannot open file 'libboost_log-vc141-mt-gd-1_64.lib'

I'm writing a program which utilizes Boost logging features and consequently, when attempting to build the said program, I'm getting the following error when generating code (on Visual Studio 2017):
1>LINK : fatal error LNK1104: cannot open file 'libboost_log-vc141-mt-gd-1_64.lib'
However, I can confirm the following:
boost_1_64_0\stage\lib has been added to "Additional Library Directories" under Linker -> General
libboost_log-vc141-mt-gd-1_64.lib is located under stage/lib since when unpacking Boost, I did a complete build with toolset set to 14.1
following relevant question's answers, I did add the specific .lib to "Additional Dependencies" under Linker -> Input
I feel like it's something obvious that I am missing. But, any help would be much appreciated.
drescherjm was correct, I was mixing 32 and 64 bit. Needed to change Target Machine under Project Configuration Properties -> Linker -> Advanced to MACHINEX86 and it worked.
Thank you!
For me, I was using the below define for linking log libraries in order to use dynamically. I removed it and worked.
//#define BOOST_LOG_DYN_LINK 1 // necessary when linking the boost_log library dynamically

Microsoft Visual Studio 2013 Link Error 1104

A while ago I attempted to make make a game using c++ and SDL. I am now taking a class that requires me to program in C++ and I would like to use VS as the IDE. I uninstalled VS 2012 and upgraded to 2013. I am able to compile c# code but when I make a c++ project I get the error
error LNK1104: cannot open file 'SDL.lib'
I went to the project properties -> Configuration Properties -> Linker -> input and made sure that SDL was not referenced there. My Additional Dependencies now has the value %(AdditionalDependencies). The rest of the options are blank. I also made sure that in VC++ Directories the Include Directories did not include anything related to SDL. Having done all of this I still get the same error. Is is somehow inheriting the SDL linker. The project only contains a hello world program which does not include any other libraries. Any help is appreciated.
You can try this:
Right click the project and choose Properties.
Open Configuration Properties --> Linker -->Input.
In the Ignore Specific Default Libraries entry, add SDL.lib.
BTW, whatever you add in your Include Directories cannot cause a linkage error (and neither can any include that you have in your project).

lnk1104: cannot open 'LIBC.lib' LINK

After writing a shader using GLee to my OpenGL project and compiling, I received the error
LNK1104: cannot open file 'LIBC.lib'. I've tried adding it and ignoring it as others suggested, but not nothing resolved the issue. Is there an alternative way to solve this that I've missed?
Here are several possible solutions:
This may due to code generation conflict. If your libc.lib's thread support is different then your project's settings, this may be causing the problem. If so, right click project, then go to properties->C++->code generation->Runtime Library and change the value to Multi-threaded(MT).
Your libc.lib may not support multi threading. Right click project, then go to properties->Linker->Input->Additional Dependencies and change libc.lib to libcmt.lib
Your application statically link multiple copies of the same library. Right click project, then go to properties->Linker->Input->Ignore Specific Library and add libc.lib
Maybe your project needs this lib, but your system doesn't have it. In that case, you have to download the .lib file from Microsoft and add the path of where you downloaded it by right clicking project, then going to properties->Linker->General->Additional Library directories.
I had this problem in MS VC++ 2012 Express with Windows SDK 7.1.
I found this solution from the DISLIN developers :
(i) in MS VC++\Project\<YourProject> Properties pull-down...
(ii) <YourProject>Property Pages\Ignore Specific Default Libraries : libc.lib
(iii) <YourProject>Property Pages\Additional Dependencies\Edit : libcmt.lib
Bingo!

Eclipse can't link to kernel32.lib

I've installed Eclipse CDT so I'll be able to write and compile C code.
The compilation progress fails and the following error appears:
LNK1104 : cannot open file kernel32.lib
I've been searching for this file in my computer and found out it appears in some folders,
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
How could I "refer" eclipse to one of this certain paths so the kernel32.lib file will be found and I'll be able to compile and run C files?
EDIT
Thanks to #mux answer the LNK1104 : cannot open file kernel32.lib is now gone , but a new error appears now : LNK1104 : cannot open file 'C:\Program.lib' .
Once again, any suggestion will be helpful.
i wasted a lot of time on this...
this is the answer you are searching for
In Eclipse > Project > Properties > Paths and Symbols > Libraries tab, enclose the path to the library in single quotes:
'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\Kernel32.Lib'
There would be a warning that the path does not exist, but it should be gone after you rebuild your project.
I've the same problem, I've fixed because of installed Microsoft Visual Studio 2010 on my computer:
Right click on your C/C++ project -> Properties -> C/C++ Build -> Environment
In LIB, click on the Button Edit on the right side
Add ;C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib <---- ; to separate the first auto detected path"
* Must be on the both Debug and Release configuration : else you'll get the same error *
you need to add the path to the library to your project, from the FAQ
Go to Your Project's Properties by right clicking on project's name
and selecting properties. Click on "C/C++ Build". Under Tool Settings
Tab, click on Directories. Click on The Add Button and Select
FileSystem. Select the folder with C/C++ libraries. Apply and then Ok.
The new library is included.
Edit:
The wiki seems outdated, but I did find the options relevant to linking here:
C/C++ Build->Settings->Tool Settings tab
you should add the include paths for headers (if any) to the compiler Includes and the libraries to the linker options Libraries(-l) and the library path to Library Search path (-L)
Go to:
"Project Properties>c/c++ Build>Settings>c++ Linker>Libraries"
Add library kernel32 and set search path to your library or set LIBRARY_PATH environment variable.
For "LNK1104 : cannot open file kernel32.lib" error you need to include path to kernel32.lib in Eclipse > Project > Properties > Paths and Symbols > Libraries tab
For LNK1104: cannot open file 'C:\Program.obj' error you need to make sure the path you provided earlier is inside single quote('). Reference
Hope this solves your problem.

LINK : fatal error LNK1104: cannot open file 'MSVCRTD.lib'

I'm a novice C++ developer. I encontered the error message indicates "LINK :fatal error LNK1104: cannot open file 'MSVCRTD.lib'" while I'm trying to debug every single project in Microsoft Visual C++ 2010 Express. I searched on Stack overflow and Google for any possible resolution, but I couldn't find exact and precise answer. What I have understood is that the "msvcrtd.lib" file should be in "\Microsoft Visual Studio 10.0\VC\lib", but that file is not there in my case. What should I do?
For the poor souls out there who are struggling with this, after an hour of research I found a solution for my Visual Studio Enterprise 2017:
First, lets find where is your library file located:
With windows explorer, go to your directory where Visual Studio is installed, (default: C:\Program Files (x86)\Microsoft Visual Studio) and do a search for msvcrtd.lib
I found mine to be in here:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\onecore\x86
Quick Fix (for one project only):
Right click on your project, click on properties, navigate to Linker, add that path to Additional Library Directories
Permanent Fix (for all projects)
Open a project
navigate to View > Property Manager (it could be under Other Windows)
Expand all folders and multi select all "Microsoft.cpp.Win32.user" & "Microsoft.cpp.64.user"
Right click and go to properties
Navigate to VC++ Directories
Add the path to default Library Directories
Go to your project properties, select Linker from left. Add this to "Additional Library Directories":
"(Your Visual Studio Path)\VC\lib"
For example:
C:\Program Files\Microsoft Visual Studio 10.0\VC\lib
I came across this problem when compiling a sample app using VS2017
Hope this will help
There is a check box that says "Inherit from parent or project defaults" in some of the property dialogs in Project Properties. Make sure that check box is checked for your Include and Library directories property windows and of course for your Additional Dependencies window.
If you use VS2017, please read it. Or just ignore this answer...It may be invalid for other VS version.
Do not trust anyone who told you to add lib path.
Here's suggestions:
[BEST] You just need to install these via VS_installer (most of us just need x86/x64 version below)
VC++ 2017 version version_numbers Libs for Spectre [(x86 and x64) | (ARM) | (ARM64)]
Visual C++ ATL for [(x86/x64) | ARM | ARM64] with Spectre Mitigations
Visual C++ MFC for [x86/x64 | ARM | ARM64] with Spectre Mitigations
[NAIVE] or disable Spectre Option for every Solution
(Why We are so hard to global disable it)
[LAUGH] Or never use VS2017
This is VisualStudioTeam's fault and Microsoft is guilty.
Why?
You can't make a global configuration to disable /QSpectre, and IDK when and why VS2017 enable it in one day. So the best way is install Spectre? ahhha?
For VS 2019, Spectre Mitigation is enabled by default.
So the right way to fix the issue would be to install VC++ Libs for Spectre.
But, to quickly resolve the issue, you may disable Spectre Mitigation
Project Properties -> C/C++ -> Code Generation -> Spectre Mitigation -> Disabled
https://devblogs.microsoft.com/cppblog/spectre-mitigations-in-msvc/
I ran into this issue. The file existed on my machine, it was in the search path. I was stumped as the error result is really unhelpful. In my case I had turned on Spectre mitigation, but had not downloaded the runtime libs for Spectre. Once I did the download all was right with the world. I had to get this installed on my CI build servers also, as these libs are not installed with VS by default.
I have solved this problem, you need install all spectre lib.
Vistual Studio Installer->Modify->Component->Any spectre lib.
This solution can be adapted to any project.
For me this issue happens after installing the (Windows Driver Kit): https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Uninstalling it fixes the problem. Just posting here as a related issue for people looking for solutions: After installing WDK VC++ is broken
Scenario:
Windows 10 with Visual Studio 2017 (FRESH installation).
'C' project (LINK : fatal error LNK1104: cannot open file 'MSVCRTD.lib').
Resolve:
Run 'Visual Studio Installer'.
Click button 'Modify'.
Select 'Desktop development with C++'.
From "Installation details"(usually on the right-sidebar) select:
4.1. VC++ 2015.3 v14.00(v140) toolset for desktop.
Version of 'toolset' in 4.1. is just for example.
Click button 'Modify', to apply changes.
Right-click 'SomeProject' -> 'Properties' ->
'Linker' ->
'General' ->
'Additional Library Directories': $(VCToolsInstallDir)\lib\x86
(!!! for x64 project: 'Additional Library Directories': $(VCToolsInstallDir)\lib\x64 !!!)
it is also worth checking that MSVCRTD.lib file is present in "C:\Program Files\Microsoft Visual Studio 10.0\VC\lib" for x64 and in C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\lib for 32 bit. Sometimes VS might not be installed properly OR these files might get deleted accidentally.
I just had this error, in my case rebuilding the project while doing nothing else worked for me.
Here's my situation
Visual studio crashed and I had to re-install and my new installation path is different than the previous one. then I had this error
the error showed that the library is located at
D:\program\Microsoft Visual Studio\...
while it should be
D:\program files\Microsoft Visual Studio\...
as I said I just rebuilt it and it worked for me and if you have a multi-solution project you have to rebuild the whole-solution
I solved the problem by adding #using <mscorlib.dll> in the main file
This indicates that Visual Studio wasn't able to find the lib (Library) directory which contains msvcrtd.lib.
IMPORTANT: This lib directory also contains linkers required during the compilation process.
So, all you need to do is override the Library Directory location. You can do so with the help of Environment Variables.
I referred to this StackOverflow Post for help. As per the answer posted, the Environment Variable LIB refers to the path where the Linker Libraries are located. Why is this method better? Because this will apply to all the projects instead of just a particular project. Also, you don't need to download anything extra. It just works...
Follow the steps below to achieve this:
STEP-1: Search for "msvcrtd.lib" in the search bar.
STEP-2: Click "Open File Location" (available in context menu)
STEP-3: Copy the address of the directory from the address bar.
STEP-4: Search "Environment" in the taskbar and click on "Edit the system environment variables".
STEP-5: Click on "Environment Variables..." button.
STEP-6: Under "System variables" section, click on "New..." button. A dialog would pop up.
STEP-7: In the dialog box, enter the following:
Variable name: LIB
Variable value: [The directory you copied in "STEP-3"]
And press "OK"
Now, you are all done!
The above answer was not quite accurate for me. I have VS2010 Ultimate installed and the file in question is not in my Visual Studio 10.0\VC folder. Rather I found it in the Visual Studio 9.0\VC folder. So if that's the case for anyone, follow the lead to change the Linker but use the Visual Studio 9.0\VC folder instead. It worked for me.
For Visual Studio 2017
Go to your project properties, select Linker from left. Add this to "Additional Library Directories":
C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\lib
I got a slightly different error
LNK1104 cannot open file 'MSVCURTD.lib'
Note it is msvcUrtd (not msvcrtd), but the file is not found on my system.
Solved it by setting the following options:
Project Properties
General
Character Set: Not Set
Common Language Runtime Support: Common Language Runtime Support (/clr)
Hope that helps.
In VS2017 (Community/Enterprise/Ultimate/Professional):
Add the path(s) of the folder(s) which include your desired ".lib" file(s) in the following path in VS:
(Right Click)Project(in Solution Explorer)->Properties->Configuration Properties->Linker->General->Additional Library Directories
If there are more than one ".lib" file use ';' to separate them otherwise click on the edit box corresponds to "Additional Library Directories" then click on "" in drop down menu and add all desired ".lib" files in newly opened window one by one and in a easy to handle manner.
I ran into this using Visual Studio 2017. I tried the solutions suggested here with explicitly adding paths to where the 'MSVCRT.lib' file was located. But I felt this probably wasn't the correct approach because previously for the past several weeks this had not been a problem with my project.
After trial and error, I discovered that if I left an empty or blank value in the Linker --> Input section, it would give me the error about LNK1104: cannot open file 'MSVCRT.lib'. Eventually I figured out that I should leave this value there instead.
On the Visual Studio project, right-Clicking on the project item in the Solution explorer panel (not the Solution itself, which is the topmost item), then select Properties. From there do the following:
Linker --> Input : %(AdditionalDependencies)
This additional information might be helpful, if you got into the situation the same way I did. I have discovered that I should not put any non-system library paths in the Linker --> Input section. With my project I was trying to compile with external .lib files. Previously I had a value in this input section like: $(ProjectDir)lib; %(AdditionalDependencies) but this lead to other problems. I discovered the correct place (it seems so far) to put paths for referencing external .lib files in a C/C++ project in Visual Studio 2017 is here:
VC++ Directories --> Library Directories : $(ProjectDir)lib; $(LibraryPath)
Note the $(LibraryPath) value will include extra values such as inherited from parents. My folder project contained a folder called 'lib' which is why I had the first value there before the semicolon.
I have included the following path
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x86
and
C:\local\boost_1_64_0\lib64-msvc-14.1
To
project properties-> linker-> Additional Directories
Click here : Image shows linking of boost and MSVC2017