簡體   English   中英

需要如何在C ++中使用不同項目中的文件的課程

[英]Lesson needed on how to work with files in different projects in C++

我現在已經能夠在同一個項目中工作了一段時間,編寫並成功運行了c ++代碼。 但是,我發現我仍然缺少有關如何將.h文件導出到另一個項目並在其中成功使用它們的一些基本知識。

我創建了第二個項目,即項目B,以測試項目A中的類。 視覺c ++:來自同一解決方案中其他項目的#include文件我將Project A中頭文件的路徑添加到Project B的項目配置中的Additional Include Directories(C \\ C ++> general and Linker> general)部分。 我嘗試遵循此頁面上的教程http://msdn.microsoft.com/zh-cn/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));
}

有兩種(通用)方法可以將文件包含到項目中:

  • 使它們成為項目的一部分(從解決方案資源管理器添加它們)或
  • 將它們導入為庫(靜態或動態鏈接)

如果使它們成為項目的一部分,則必須添加標頭和源文件才能正確編譯項目。 但是,這通常不是您想要執行的操作,因為它違反了擁有外部庫的目的。

第二種情況是使用外部庫,這需要您:

  • 將庫導出的頭文件包括在C ++屬性中。
  • 對於靜態鏈接:您還必須在鏈接器屬性中包括* .lib文件(構建庫的輸出)。

要么


所以請記住:構建C ++項目有兩個部分- 編譯鏈接

編譯器錯誤:
如果遇到錯誤,其代碼以C*開頭(例如C1083),並且與文件的問題標頭相關,請檢查“屬性”->“ C / C ++”->“常規”->“附加包含目錄”。

鏈接器錯誤:
如果您收到錯誤代碼以LNK*開頭的錯誤,請檢查

  • 屬性->鏈接器->常規->附加庫目錄(確保該目錄指向* .lib文件所在的位置)
  • 屬性->鏈接器->輸入->其他依賴項(確保在此添加* .lib文件)。

如果要動態鏈接,請檢查是否正確引用了DLL。


因此,在您的情況下,您必須確定要靜態還是動態鏈接,然后進行適當的引用。 因此,您知道從動態庫還是靜態庫獲取這些頭文件?

當鏈接器為駐留在另一個庫(DLL或共享庫)中的符號發出unresolved external symbol ,這表明您需要將應用程序鏈接到該另一個庫的.lib文件。 這很可能是這里發生的事情。

有關更多信息,請參見:

(MSDN)演練:創建和使用動態鏈接庫(C ++)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM