【问题标题】: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 是的

标签: c++ visual-studio visual-studio-2015 static-libraries


【解决方案1】:

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

namespace tensorflow{
      class Tensor;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-14
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2011-04-14
    相关资源
    最近更新 更多