I have a VC++ project. When i compile the project in VS2008 i get the following linker error:
**Error 1 fatal error LNK1104: cannot open file 'ATL9ProPS.def' **
I have been compiling this same code since a year (with minor changes here and there) now but never saw this error. Also, my project does not refer to any file by name 'ATL9ProPS.def. (I guess this file is part of a project that is save to computer during Visual studio installation)
When i searched for this .def file in my machine i found it in the following location
C:\Documents and Settings\Abi\My Documents\Visual Studio 2008\Projects\ATL9Pro.
But how on earth is this file bothering my project. I have no clue how this is linked to my project. Please help me resolve this.
For details
Project -> Properties -> Configuration Properties -> Linker -> Input
-> Module Definition File -> Replace this with the right def file.
Try my moving that file to a different location or by renaming the file. Also see if there is any path in the Linker -> Additional include directories refers to My Documents/.../Projects folder.
Anand,
Thanks for the response. Not exactly Linker -> Additional include directories but The Linker->ModuleDefenitionFile option was referring to the file name ''ATL9ProPS.def'. I just replaced this with the right def file and it worked. Thanks
Related
I'm receiving the following build warning when attempting to compile a .sln for Chromium:
Warning 1 warning MSB8012: TargetPath(C:\chromiumtrunk\chromium\src\base\allocator\..\..\build\Debug\allocator_extension_thunks.lib) does not match the Library's OutputFile property value (C:\chromiumtrunk\chromium\src\build\Debug\lib\allocator_extension_thunks.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile). C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets 1299 5 allocator_extension_thunks
It is complaining that this path:
C:\chromiumtrunk\chromium\src\base\allocator\..\..\build\Debug\allocator_extension_thunks.lib
doesn't match the expected path:
C:\chromiumtrunk\chromium\src\build\Debug\lib\allocator_extension_thunks.lib)
but... "\base\allocator..\..\" should cancel out... right? The only other difference between the two paths is the fact that the .lib gets output to a /lib folder. This seems correct. I don't understand how I should be properly resolving this message.
I'm happy to provide any information necessary. I assume it's just a simple variable tweak, but a bit lost..
C/C++ -> General -> Output Directory: '..\..\build\$(Configuration)\
C/C++ -> General -> Intemeradiate Directory: '$(OutDir)obj\$(ProjectName)\
Librarian -> General -> Output File: $(OutDir)lib\$(ProjectName).lib
Yes, the extra "lib" produces this warning, the two paths do not match. Not actually sure what goes wrong, the final .lib file does end up in the lib directory even though MSBuild reports it wrong in the build completion message. Short from that bad message, I'd guess at an issue with automatic dependencies. This friction got introduced at VS2010 when they moved from the custom VCBuild to MSBuild.
If you want to get rid of the warning then restore the library project's Output File setting to $(OutDir)$(TargetName)$(TargetExt) and change the Output Directory to ..\..\build\lib\$(Configuration).
When I debug C++ file of open source, the error message show that:
error 1 error LNK1104: cannot open file 'C:\Program Files\Microsoft DirectX SDK (June2010)\Lib\x86.obj'
The directory of Microsoft Directx sure have no file called 'x86.obj'.
So, what is the x86.obj? Where can I get it?
The platform I use is Visual Studio 2010.
I think the obj file maybe is a combine of .lib file... because in the path, I only see the lib file under the directory of /x86, so I guess:
The C++ use x86.obj, but it just means that it use lib file under /x86 directory.
So, is there any way to let many .lib file turn to one .obj file?
Any advising appreciate!
I have found the solution!
I try to search the text "pragma" all the file, and found what lib the C++ use, and I add it to the linker with whole path like: C:/Program Files/Microsoft DirectX SDK (June 2010)/Lib/x86/dxguid.lib
So, there is no x86.obj file! But if someone face the likely problem, remember to search (crl+F)"pragma", and check what lib you use and add to linker with whole path. Sometimes, the linker can not understand whether the "path" is directory or a lib file, so it occur errors.
Thanks for everyone!
I'm finding it really difficult to properly link a .lib file to my C++ Win32 Console Application. Here's my problem.
Just as in this MSDN article, I have developed a MathFuncsLib.lib file.
http://msdn.microsoft.com/en-us/library/ms235627%28v=vs.80%29.aspx
Then, in the MyExecRefsLib Win32 Console App, I want to link to the above file. So, inside MyExecRefsLib folder (same folder where .sln file resides) I created a directory called "LibraryFiles" and placed both MathFuncsLib.lib file AND MathFuncsLib.h file.
Then, in Properties->Linker->Input I added both "MathFuncsLib.lib" and "MathFuncsLib.h" (without full path) and then in Properties->Linker->Additional Library Directories I added the path to my folder "LibraryFiles" which is what pretty much EVERY thread on the web about this problem tells me to do.
But now it gives me the following error:
fatal error C1083: Cannot open the
include file. 'MathFuncsLib.h': No
such file or directory.
What am I doing wrong? Please help.
Note that my code is exactly the same as what's in the above given MSDN link.
To link with a .lib file, you just need to:
right clic on the project name, select Properties
under Properties->configuration properties->C/C++->General item "other include directories" add the path to your .h file
under Properties->Linker->Input add the path and name of your .lib file
And that's it.
I am getting the following error when i build my code using regex.hpp I am using VS2010 VC++
fatal error C1083: Cannot open include file: 'boost/regex.hpp': No such file or directory
boost\boost_regex-vc71-mt-1_33_1.lib file is here.. is this correct?
It sounds like your include settings do not have the path to the boost installation parent directory.
Look at these instructions: http://www.boost.org/doc/libs/release/more/getting_started/windows.html#build-from-the-visual-studio-ide
and note especially the include directory setup.
You need to make sure that you have included the path to the Boost header files in Visual C++.
Follow the instructions here.
This issue arises because Visual C++ does not include the path to the Boost header files. By including the directory, Visual C++ will search that directory for the problem and hopefully your problem should be solved.
Maybe the error message is true? The file is not there?
If you are in Ubuntu, install the boost library with synaptic, including the regex package. It is not enough with downloading from the boost website and building the regex library in the computer (instructions in http://www.boost.org/doc/libs/release/libs/regex/doc/html/boost_regex/install.html), additionally you have to download it with synaptic. I guess this second redundant step is neccessary because synaptic may update some system variables (the $PATH???) and install some other dependencies that a direct download from www.boost.org does not do.
I have a C++ driver I'm trying to compile, and it has this line in the code:
#import "msado15.dll" no_namespace rename("EOF", "EndOfFile")
But when I compile the project, I get the error:
Error 1 fatal error C1083: Cannot open type library file: 'msado15.dll': No such file or directory
I have the DLL, but where do I put it so that the compiler can see it?
You can place the DLL in the same path as the referencing file (.h) as you have done, alternatively you can modify the additional include paths for the LIB section of your project(s). In VC++ this will be:
Project | Properties | Configuration Properties | Linker | General | Additional Library Directories
This method can be useful if you are centralizing third party dependencies and you don't want to be forced to keeping the referenced file (.h) and DLL in sync via the same path.
See this MSDN link for further details.
For VC++2010(VS2010): the compiler is not able to see the msado15.dll
which is located at C:\Program Files\Common Files\System\ado
Go to Project | Properties | Configuration Properties | VC++ Directories
and add the following at executable directories
$(CommonProgramFiles)\System\ado;
You should be fine
This may be a little out of date for most people, however - for Visual Studio 2008, for a particular
Project |
Configuration Properties |
C/C++ |
Additional Include Directories |
Select and click on the ellipsis (...).
Add the directory
C:\Program Files\Common Files\System\ado
and move it to the bottom of the list using the arrows.
OK, found it by reading the documentation. I just had to put it in the same folder as the referenced file (which was in a different location to the project source code).
You need to have library files and function definition headers to do this. If you happen to don't have them, you would try dynamic loading of DLL using LoadLibrary and GetProcAddress, pointers for linking functions.
Try to set "Delayed DLL loading" (or an option similar) in 'Project Properties'->'Linker'->'input' section of your VC++ project.