关于如何在 C++ 中处理不同项目中的文件所需的课程
Posted
技术标签:
【中文标题】关于如何在 C++ 中处理不同项目中的文件所需的课程【英文标题】:Lesson needed on how to work with files in different projects in C++ 【发布时间】:2012-06-08 18:46:38 【问题描述】:我已经能够在同一个项目中工作一段时间了,编写并成功运行了 c++ 代码。但是,我发现我仍然缺少一些关于如何将我的 .h 文件导出到另一个项目并在那里成功使用它们的要点。
我创建了第二个项目 project B 来测试我在 project 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));
【问题讨论】:
快速更新帖子以反映新错误。 【参考方案1】:有两种(通用)方法可以将文件包含到您的项目中:
让它们成为您项目的一部分(从解决方案资源管理器中添加它们)或 将它们作为库导入(静态或动态链接)如果您将它们作为项目的一部分,那么您必须添加头文件和源文件才能正确编译项目。但是,这通常不是您想要做的,因为它违背了拥有外部库的目的。
第二种情况是使用外部库,这需要你:
在您的 C++ 属性中包含由库导出的头文件。 对于静态链接:您还必须在链接器属性中包含 *.lib 文件(构建库的输出)。或
动态链接:see tutorial.请记住:构建 C++ 项目有两个部分 - 编译和链接。
编译器错误:
如果您收到代码以 C*
开头的错误(例如 C1083)并且与文件的问题标头有关,请检查 Properties-> C/C++ -> General -> Additional Include Directories。
链接器错误:
如果遇到代码以LNK*
开头的错误,请检查
如果您是动态链接,请检查您是否正确引用了 DLL。
因此,在您的情况下,您必须确定是静态链接还是动态链接,然后进行适当的引用。 那么你是从动态库还是静态库中获取这些头文件的?
【讨论】:
我试图在同一个项目中同时做这两个。我首先构建了谷歌测试文件并添加了静态库文件,并且构建正确。我尝试在同一个解决方案文件中从另一个项目链接到 *.dll。这就是我被困在这一点上的地方。错误消息似乎指向导入 *.lib 文件的一些问题,只是我没有该项目的 *.lib 文件 我假设在尝试进行动态链接时,我使用 *.dll 文件,而对于静态链接,我使用 *.lib 文件。错误是 LINK:致命错误 LNK1104:无法打开文件 'C:\Users\LaC\Projects\OSGB\Debug\OSGB.lib'【参考方案2】:当链接器为存在于另一个库(DLL 或共享库)中的符号发出 unresolved external symbol
时,这表明您需要将您的应用链接到该其他库的 .lib 文件。这很可能就是这里发生的事情。
欲了解更多信息,请参阅:
(MSDN) Walkthrough: Creating and Using a Dynamic Link Library (C++)
【讨论】:
感谢您的链接。我通读并按照该列表中的步骤进行操作。但我似乎还有一个链接器问题要处理。新错误是 >LINK:致命错误 LNK1104:无法打开文件“C:\Users\LaC\Projects\OSGB\Debug\OSGB.lib”。我在调试文件夹中没有看到 .lib 文件 有人能帮忙吗?我已经为此努力了好几个小时了。以上是关于关于如何在 C++ 中处理不同项目中的文件所需的课程的主要内容,如果未能解决你的问题,请参考以下文章
如何从 OpenCV C++ 中的 HoughLines 函数输出中绘制所需的线?
如何安装在 windowsservercore Docker 映像上执行本机 C++ DLL/EXE 所需的所有依赖二进制文件
Eclipse 中的 Java 项目:无法解析 java.lang.Object 类型。它是从所需的 .class 文件中间接引用的