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.
Related
I am new to visual c++. I am trying to save a label as pdf file in visual c++. I linked pdfsharp dll by add resources from properties. When i run the .exe file in my system, it doesnt give any error. But when the .exe is run in other systems it gives error telling
"could not load file or assembly 'pdfSharp, version=1.31.1789.0, culture = neutral, publicKeytoken= f94615aa0424f9eb' or one of its dependencies"
But when i add the pdfsharp in the folder where this .exe stays, it doesnt give any error. What could be the problem. What should i do to run without adding pdf dll in the .exe folder.
An EXE that links to PDFsharp.dll cannot run without PDFsharp.dll. You can add PDFsharp.dll to a directory listed in the PATH environment variable if you do not want to have it in the EXE folder.
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!
Disclaimer: Am a C# developer trying to understand a few C++ fundamentals
Have created a command line project which has the .lib of a DLL file linked under Linker > Input > Additional dependencies, and also has the location of the header files specified under C/C++ > General > Additional Include Directories. Ran a build and all compiled okay, with the .exe being built in the Debug/Release dir.
Problem is I also expected the .dll file the project depends on to be there (just like when you add a reference in a .Net project) - but it isn't. When launching the .exe it complains that it can't find the DLL. Fair enough, but why didn't the VC++ put the DLL there if it knows it's required?
And is there a "best practice" to ensuring the dependent DLL files are in the output dir, other than manually copying them there? I have a project that will require use of some third-party libraries, and I was hoping the IDE would help me manage them...
Big thanks for any guidance given!
If you create solution which contains exe and dll, all output files are created in $(SolutionDir) Debug or Release subdirectories, and exe runs successfully. Otherwise, you have one of the following options:
Copy Dll in Post-build step to directory where it is available for loading (usually .exe directory)
Add Dll directory to PATH.
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
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.