How to use functions from different C++ projects in Visual Studio 2010?

最后都变了- 提交于 2019-12-20 10:42:14

问题


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 under C:\Users\me\Desktop\SolutionDir\FirstProject and C:\Users\me\Desktop\SolutionDir\SecondProject.

My first project contains two files, a header function.h and a cpp file function.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 SecondProject Configuration Properties > C/C++ > General > Additional Include Directories. I still get the classical error : error LNK2019: unresolved external symbol when calling the function print_stuff().

Any ideas ?


回答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:

  1. In Linker/General, you might need to add to "Additional Library Directories" the folder where the first project's .lib is built.
  2. In Linker/Input, you will need to add to Additional Dependencies the name of the .lib file like FirstProject.lib or whatever its name is.



回答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.




回答3:


You can include a realPath for you include directory ! Like for your FirstProject include "./../" And the same include dir for your second Project like that you can move or copy your directory SolutionDir and it will always work !

For your unresolved linked you have to add the function.cpp and function.h in your First and Second Project You can place it in SolutionDir! Like that You always have two files for your first and second project instead of four !

Hope it helps !



来源:https://stackoverflow.com/questions/10438770/how-to-use-functions-from-different-c-projects-in-visual-studio-2010

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!