10

相互に対話できる Visual Studio 2010 の同じソリューションで 2 つの C++ プロジェクトをビルドしたいと考えています。ディレクトリの下にソリューションを作成しましたC:\Users\me\Desktop\SolutionDir。2 つのプロジェクトがそれぞれ および の下に作成されていC:\Users\me\Desktop\SolutionDir\FirstProjectますC:\Users\me\Desktop\SolutionDir\SecondProject

私の最初のプロジェクトには、ヘッダーfunction.hと cpp ファイルの 2 つのファイルが含まれていますfunction.cpp

関数.h

#pragma once
void print_stuff();

関数.cpp

#include "function.h"
#include <iostream>

void print_stuff() {
    std::cout << "hello world" << std::endl;
}  

私の2番目のプロジェクトにはメインファイルが含まれていますmain.cpp

main.cpp

#include "FirstProject\function.h"
#include <iostream>

int main(void) {
    print_stuff();

    int stop;
    std::cin >> stop;
    return 0;
}  

C:\Users\me\Desktop\SolutionDir\SecondProjectにディレクトリを追加しましたConfiguration Properties > C/C++ > General > Additional Include Directories。私はまだ古典的なエラーを受け取ります:error LNK2019: unresolved external symbol関数を呼び出すときprint_stuff()

何か案は ?

4

3 に答える 3

7

プロジェクト プロパティ/構成プロパティ/一般/構成タイプで、最初のプロジェクトを静的ライブラリとしてビルドしてみてください。

次に、2 番目のプロジェクトのプロジェクト プロパティで、2 つのことを変更する必要があります。

  1. Linker/General では、最初のプロジェクトがビルドされるフォルダーを「Additional Library Directories」に追加する必要がある場合があります.lib
  2. .libLinker/Input では、Additional Dependencies にファイルの名前などを追加する必要がありますFirstProject.lib
于 2012-05-03T20:28:46.633 に答える
3

はい、 を使用して関数をエクスポートし、 を使用して_declspec(dllexport)関数を呼び出すプロジェクトにインポートする必要があります_declspec(dllimport)

この二重性は通常、マクロで実現されます。

#pragma once

#ifdef FIRST_PROJECT_BUILD
#define IMPEXP _declspec(dllexport)
#else
#define IMPEXP _declspec(dllimport)
#endif

IMPEXP void print_stuff();

FIRST_PROJECT_BUILD最初のプロジェクトの構成では、プリプロセッサ ディレクティブを追加します。そうすれば、最初のプロジェクトをコンパイルするときに、関数をエクスポートすることをコンパイラに伝えます。ただし、定義されていない別のプロジェクトにファイルを含める場合はFIRST_PROJECT_BUILD、関数が別のライブラリに実装されているため、インポートする必要があることをコンパイラに伝えます。

また、追加のインクルード パスを追加するだけでなく.lib、関数を実装するプロジェクトから生成されたファイルを、Extra dependenciesプロジェクト構成の [ライナー] 設定のタブに追加する必要があります。

于 2012-05-03T20:27:33.393 に答える
0

インクルードディレクトリのrealPathをインクルードできます!FirstProjectの場合と同様に、「。/ ../」をインクルードします。2番目のプロジェクトの場合も同じインクルードディレクトリを使用して、ディレクトリSolutionDirを移動またはコピーでき、常に機能します。

未解決のリンクについては、最初と2番目のプロジェクトにfunction.cppとfunction.hを追加する必要があります。SolutionDirに配置できます。そのように、最初と2番目のプロジェクトには常に4つではなく2つのファイルがあります。

それが役に立てば幸い !

于 2012-05-03T20:31:10.133 に答える