关于如何在C+中处理不同项目中的文件所需的课程+; 我已经能够在同一个项目中工作一段时间,编写并成功运行C++代码。然而,我发现我仍然缺少一些关于如何将我的.h文件导出到另一个项目并在其中成功使用它们的要点

关于如何在C+中处理不同项目中的文件所需的课程+; 我已经能够在同一个项目中工作一段时间,编写并成功运行C++代码。然而,我发现我仍然缺少一些关于如何将我的.h文件导出到另一个项目并在其中成功使用它们的要点,c++,visual-studio-2010,googletest,C++,Visual Studio 2010,Googletest,我创建了第二个项目,项目B来测试我在项目a中的类。 我将项目A中头文件的路径添加到项目B的项目配置中的附加包含目录(C\C++>常规和链接器>常规)部分。我试着按照本页上的教程进行操作,但仍然出现以下错误 **链接:致命错误LNK1104:无法打开文件“C:\Users\LaC\Projects\OSGB\Debug\OSGB.lib”** 如果您能帮助我准确地了解这是如何做到的,我将不胜感激,以便将来遇到此问题时,我能够知道如何进行故障排除 下面的代码就是我正在使用的全部代码 IN PROJE

我创建了第二个项目,项目B来测试我在项目a中的类。 我将项目A中头文件的路径添加到项目B的项目配置中的附加包含目录(C\C++>常规和链接器>常规)部分。我试着按照本页上的教程进行操作,但仍然出现以下错误

**链接:致命错误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));
}

当链接器发出另一个库(DLL或共享库)中存在的符号的
未解析外部符号时,这表示您需要将应用程序链接到另一个库的.lib文件。这很可能就是这里发生的事情

有关更多信息,请参阅:


当链接器为另一个库(DLL或共享库)中的符号发出
未解析的外部符号时,这表示您需要将应用程序链接到另一个库的.lib文件。这很可能就是这里发生的事情

有关更多信息,请参阅:

将文件包含到项目中有两种(常规)方法:

  • 使它们成为项目的一部分(从解决方案资源管理器添加它们)或
  • 将它们作为库导入(静态或动态链接)
如果将它们作为项目的一部分,则必须添加头文件和源文件,以便正确编译项目。然而,这通常不是您想要做的,因为它违背了拥有外部库的目的

第二种情况是使用外部库,这要求您:

    包含C++属性库中导出的头文件。
  • 对于静态链接:您还必须在链接器属性中包含*.lib文件(构建库的输出)

  • 对于动态链接:

请记住:构建C++项目有两个部分-<强>编译< <强> > <强>链接< /强> . 编译器错误:
如果您收到一个错误,其代码以
C*
(例如C1083)开头,并且与文件的问题标题有关,请检查属性->C/C++->常规->其他包含目录

链接器错误:
如果出现代码以
LNK*
开头的错误,请检查

  • 属性->链接器->常规->其他库目录(确保该目录指向*.lib文件所在的位置)
  • 属性->链接器->输入->其他依赖项(确保此处添加了*.lib文件)
如果是动态链接,请检查是否正确引用了DLL


因此,在您的情况下,您必须确定是静态链接还是动态链接,然后进行适当的引用。那么,您是从动态库还是从静态库获取这些头文件呢?

有两种(常规)方法可以将文件包含到项目中:

  • 使它们成为项目的一部分(从解决方案资源管理器添加它们)或
  • 将它们作为库导入(静态或动态链接)
如果将它们作为项目的一部分,则必须添加头文件和源文件,以便正确编译项目。然而,这通常不是您想要做的,因为它违背了拥有外部库的目的

第二种情况是使用外部库,这要求您:

    包含C++属性库中导出的头文件。
  • 对于静态链接:您还必须在链接器属性中包含*.lib文件(构建库的输出)

  • 对于动态链接:

请记住:构建C++项目有两个部分-<强>编译< <强> > <强>链接< /强> . 编译器错误:
如果您收到一个错误,其代码以
C*
(例如C1083)开头,并且与文件的问题标题有关,请检查属性->C/C++->常规->其他包含目录

链接器错误:
如果出现代码以
LNK*
开头的错误,请检查

  • 属性->链接器->常规->其他库目录(确保该目录指向*.lib文件所在的位置)
  • 属性->链接器->输入->其他依赖项(确保此处添加了*.lib文件)
如果是动态链接,请检查是否正确引用了DLL



因此,在您的情况下,您必须确定是静态链接还是动态链接,然后进行适当的引用。那么,您是从动态库还是从静态库获取这些头文件呢?

谢谢您的链接。我通读了一遍,并按照列表中的步骤进行了操作。但我似乎还有一个链接器问题要处理。新错误为>链接:致命错误LNK1104:无法打开文件“C:\Users\LaC\Projects\OSGB\Debug\OSGB.lib”。我在调试文件夹中没有看到.lib文件,有人能帮忙吗?我已经花了好几个小时在这上面了。谢谢你的链接。我通读了一遍,并按照列表中的步骤进行了操作。但是