How to use functions from different C++ projects in Visual Studio 2010?
Solution 1
Try building the first project as a Static Library in Project Properties/Configuration Properties/General/Configuration Type.
Then in your project properties for the second project, you'll need to change two things:
- In Linker/General, you might need to add to "Additional Library Directories" the folder where the first project's
.lib
is built. - In Linker/Input, you will need to add to Additional Dependencies the name of the
.lib
file likeFirstProject.lib
or whatever its name is.
Solution 2
Yes, you need to export the functions using _declspec(dllexport)
and import them in the project that calls the functions with _declspec(dllimport)
.
This duality is usually achieved with a macro:
#pragma once
#ifdef FIRST_PROJECT_BUILD
#define IMPEXP _declspec(dllexport)
#else
#define IMPEXP _declspec(dllimport)
#endif
IMPEXP void print_stuff();
In the configuration of your first project, you add FIRST_PROJECT_BUILD
to your preprocessor directives. That way, when you compile first project, you tell the compiler the function is to be exported. However, when you include the file in a different project, that doesn't have FIRST_PROJECT_BUILD
defined, you tell the compiler the function is implemented in a different library and should be imported.
Also, besides adding the extra include paths, you need to add the generated .lib
files from the projects implementing the functions to the Extra dependencies
tab in the Liner settings of your project configuration.
Comments
-
vanna almost 2 years
I would like to build two C++ projects in the same solution in Visual Studio 2010 that can interact with each other. I have created a solution under directory
C:\Users\me\Desktop\SolutionDir
. The two projects have been created respectively underC:\Users\me\Desktop\SolutionDir\FirstProject
andC:\Users\me\Desktop\SolutionDir\SecondProject
.My first project contains two files, a header
function.h
and a cpp filefunction.cpp
function.h
#pragma once void print_stuff();
function.cpp
#include "function.h" #include <iostream> void print_stuff() { std::cout << "hello world" << std::endl; }
My second project contains the main file
main.cpp
main.cpp
#include "FirstProject\function.h" #include <iostream> int main(void) { print_stuff(); int stop; std::cin >> stop; return 0; }
I added the directory
C:\Users\me\Desktop\SolutionDir\
in my SecondProjectConfiguration Properties > C/C++ > General > Additional Include Directories
. I still get the classical error :error LNK2019: unresolved external symbol
when calling the functionprint_stuff()
.Any ideas ?
-
Chris A. almost 12 yearsThis is assuming the first project is a
.dll
-
John Dibling almost 12 yearsI gathered that the OP doesn't know about DLLs. You won't be able to tell them everything they need to know,but a link or something might get them on their way.
-
Luchian Grigore almost 12 years@ChrisA. why? Can't you dynamically load an exe? :)
-
Chris A. almost 12 yearsI was under the impression that
_declspec(dllexport)
only should be used when exporting from a.dll
. Will it also work if the first project is a static library? -
Luchian Grigore almost 12 years@ChrisA. IDK if it's needed for a static lib, but I don't see why it won't work.
-
Chris A. almost 12 yearsYeah, you're right, it doesn't hurt in the case of a static library.
-
vanna almost 12 yearsThanks a lot ! I totally forgot to specify that FirstProject should be a static library. It is now working !