包含在自制静态库头文件中使用的库

Posted

技术标签:

【中文标题】包含在自制静态库头文件中使用的库【英文标题】:include libraries that are used in header file of self-made static library 【发布时间】:2019-05-19 10:30:32 【问题描述】:

在一个静态库项目中,我有一个类似于下面的“myClass.h”:

class myClass
.
.
#include "tensorflow/....h" //some tensorflow header file
.
.
using tensorflow::Tensor;
.
.
void CopyTensorImage2Cv(tensorflow::Tensor &Tensor);
.
.

我有定义为CopyTensorImage2Cv() 的“myClass.cpp”。

我想做一个静态库,所以我构建项目并成功获取“myClass.lib”。

现在,我用源代码“test.cpp”制作了一个控制台应用程序来使用这个 lib 文件。 当我添加 lib 文件并在“test.cpp”旁边复制“myClass.h”并构建项目时,Visual Studio 出现无法理解 #include "tensorflow/....h""using tensorflow::Tensor" 的错误

在这种情况下我该怎么办,我想使用一个静态库,它在其头文件中使用另一个库?

【问题讨论】:

.h 文件是否包含整个库?也许它取决于其他元素?包含路径是否正确? 是的,当我使用此代码时,所有代码都可以正常工作。我的问题是是否将此代码用作静态库。 包括模板? 建立一个只包含必要的头文件和myClass.cpp的项目,编译它,你会得到一个与'main()'相关的错误,但忽略它,你会得到myClass.o file(object文件)比在添加所有必要的文件(头文件 + myClass.h + main() 文件)后的下一个项目中,链接 myClass.o 文件并运行项目。这次 myClass.o 将充当静态库。 @Michael Chourdakis 是的 【参考方案1】:

我找到了解决方案, 我使用前向声明来避免在我的头文件中使用#include。 这个对我有用。 有关更多详细信息,您可以在头文件中搜索前向声明。 例如在这种情况下,我使用以下代码:

namespace tensorflow
      class Tensor;
;

【讨论】:

以上是关于包含在自制静态库头文件中使用的库的主要内容,如果未能解决你的问题,请参考以下文章

如何从我的 Visual Studio 静态代码分析中排除库头?

静态库和动态库的使用

如何创建包含静态库的 pod?

动态加载静态库?

如何在Xcode中使用静态库

静态库:从头文件中隐藏私有成员