1

我已经能够在同一个项目中工作一段时间,编写并成功运行 c++ 代码。但是,我发现我仍然缺少一些关于如何将我的 .h 文件导出到另一个项目并在那里成功使用它们的要点。

我创建了第二个项目,项目 B来测试我在项目 A中的类。 visual c++: #include files from other projects in the same solution我将Project A 中头文件的路径添加到Project B的项目配置中的 Additional Include Directories(C\C++>general and 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

有两种(一般)方法可以将文件包含到您的项目中:

  • 使它们成为您项目的一部分(从解决方案资源管理器中添加它们)或
  • 将它们作为库导入(静态或动态链接)

如果将它们作为项目的一部分,则必须添加头文件和源文件才能正确编译项目。但是,这通常不是您想要做的,因为它违背了拥有外部库的目的。

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

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

或者


所以请记住:构建 C++ 项目有两个部分——编译链接

编译器错误:
如果您收到一个错误,其代码以C*(例如 C1083)开头并且与文件的问题标头有关,请检查属性-> C/C++ -> 常规-> 附加包含目录。

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

  • 属性 -> 链接器 -> 常规 -> 附加库目录(确保这指向 *.lib 文件所在的位置)
  • 属性 -> 链接器 -> 输入 -> 附加依赖项(确保在此处添加 *.lib 文件)。

如果您正在动态链接,请检查您是否正确引用了 DLL。


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

于 2012-06-08T19:01:10.243 回答
0

当链接器发出unresolved external symbol存在于另一个库(DLL 或共享库)中的符号时,这表明您需要将您的应用链接到该其他库的 .lib 文件。这很可能是这里发生的事情。

有关更多信息,请参阅:

(MSDN) 演练:创建和使用动态链接库 (C++)

于 2012-06-08T18:49:58.057 回答