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