1

私はしばらくの間同じプロジェクトで作業し、c++コードを記述して正常に実行することができました。ただし、.hファイルを別のプロジェクトにエクスポートし、そこで正常に使用する方法について、いくつかの重要事項がまだ不足していることに気付きました。

2番目のプロジェクトであるプロジェクトBを作成して、プロジェクトAにあるクラスをテストしました。 Visual C ++:同じソリューション内の他のプロジェクトの#includeファイルプロジェクトA のヘッダーファイルのパスを、プロジェクトBのプロジェクト構成の[追加のインクルードディレクトリ(C \ C ++>generalおよびLinker>general)]セクションに追加しました。このページhttp://msdn.microsoft.com/en-us/library/ms235636.aspxのチュートリアルに従ってみましたが、それでも以下のエラーが発生します。

**リンク:致命的なエラーLNK1104:ファイルを開くことができません'C:\ Users \ LaC \ Projects \ OSGB \ Debug \ OSGB.lib **

将来、この問題が発生したときにトラブルシューティングの方法を知ることができるように、これがどのように行われるかを正確に理解するための助けをいただければ幸いです。

以下のコードは私が扱っているすべてです。

IN PROJECT A
=============

//Utility.h
class Utility
{
    private:

    protected:

    public:
        Utility(void);
        ~Utility(void);
        double square_root (const double);
};

//Utility.cpp

    #include "StdAfx.h"
    #include "Utility.h"
    
    
    Utility::Utility(void)
    {
        //do nothing for now
    }
    
    
    Utility::~Utility(void)
    {
        //do nothing for now
    }
    
    double Utility::square_root (const double)
    {
        return 0;
    
    }

IN PROJECT B
===============

#include "gtest/gtest.h"
#include "Utility.h"

TEST (SquareRootTest, PositiveNos) { 

    Utility u; 
    EXPECT_EQ (50.3321, u.square_root (2533.310224));
}
4

2 に答える 2

1

プロジェクトにファイルを含めるには、2つの(一般的な)方法があります。

  • それらをプロジェクトの一部にする(ソリューションエクスプローラーから追加する)または
  • それらをライブラリとしてインポートします(静的または動的リンク)

それらをプロジェクトの一部にする場合、プロジェクトを正しくコンパイルするには、ヘッダーとソースファイルを追加する必要があります。ただし、これは通常、外部ライブラリを持つという目的を損なうため、あなたがやりたいことではありません。

2番目のケースは、外部ライブラリを使用することです。これには、次のことが必要です。

  • ライブラリによってエクスポートされるヘッダーファイルをC++プロパティにインクルードします。
  • 静的リンクの場合:リンカーのプロパティに* .libファイル(ライブラリーのビルドの出力)も含める必要があります。

また


したがって、覚えておいてください。C++プロジェクトの構築には、コンパイルリンクの2つの部分があります。

コンパイラエラー:
コードがC*(C1083など)で始まり、ファイルの問題ヘッダーに関連するエラーが発生した場合は、[プロパティ]-> [C /C++]->[一般]->[追加のインクルードディレクトリ]を確認してください。

リンカエラー:
コードが。で始まるエラーが発生した場合はLNK*、次を確認 してください。

  • [プロパティ]->[リンカー]->[一般]->[追加のライブラリディレクトリ](これが* .libファイルの場所を指していることを確認してください)
    AND
  • [プロパティ]->[リンカー]->[入力]->[追加の依存関係](*。libファイルがここに追加されていることを確認してください)。

動的にリンクしている場合は、DLLを正しく参照していることを確認してください。


したがって、あなたの場合、静的にリンクしているか動的にリンクしているかを判断してから、適切な参照を作成する必要があります。では、これらのヘッダーファイルを動的ライブラリまたは静的ライブラリから取得することに注意してください。

于 2012-06-08T19:01:10.243 に答える
0

リンカがunresolved external symbol別のライブラリ(DLLまたは共有ライブラリ)に存在するシンボルを発行する場合、これは、アプリをその別のライブラリの.libファイルにリンクする必要があることを示します。それがここで起こっていることである可能性が最も高いです。

詳細については、以下を参照してください。

(MSDN)ウォークスルー:ダイナミックリンクライブラリ(C ++)の作成と使用

于 2012-06-08T18:49:58.057 に答える