在Windows上构建Tensorflow C ++共享库时出错

时间:2018-10-10 14:06:07

标签: c++ tensorflow cmake

我正在尝试将Tensorflow作为一个独立项目构建,并一直在遵循本教程

http://www.stefanseibert.com/2017/10/tensorflow-as-dll-into-your-windows-c-project-with-gpu-support-and-cmake-v1-3/

但也可以使用cpu支持

我的环境设置版本

protobuf 3.6.1
tensorflow 1.10.0
tf.GIT_VERSION = b'v1.10.0-rc1-19-g656e7a2b34'

这是我用来生成共享库的步骤

  1. https://github.com/tensorflow/tensorflow.git

  2. 获取的源代码
  3. 已经安装了依赖项,因为我不使用python绑定,不需要SWIG,所以我安装了Git(版本2.15.1.windows.2)和cmake 3.11.1

    < / li>
  4. 我使用Visual Studio 2015中的64位工具,因为VS2015是构建DLL所必需的。我应该能够打开“ VS2015 x64本机工具命令提示符”。这是必需的,因此VS使用64位工具集。

  5. 在命令行中导航至源代码的“ tensorflow / contrib / cmake”子文件夹,并使用“ mkdir build”创建目录。然后使用“ cd build”导航到新的build文件夹。

  6. 创建构建解决方案:cmake的.. -A 64 -DCMAKE_BUILD_TYPE = RelWithDebInfo -Dtensorflow_BUILD_CC_EXAMPLE = OFF -Dtensorflow_ENABLE_GRPC_SUPPORT = OFF -Dtensorflow_BUILD_CC_TESTS = OFF -Dtensorflow_BUILD_PYTHON_TESTS = OFF -Dtensorflow_ENABLE_GPU = OFF -Dtensorflow_WIN_CPU_SIMD_OPTIONS = /拱:AVX -Dtensorflow_BUILD_SHARED_LIB = ON

  7. 一切都进行到此为止。为了构建tensorflow.dll,我发出了以下命令:MSBuild / p:Configuration = RelWithDebInfo tensorflow.vcxproj

  8. 这将引发错误: D:\ work \ tensorflow \ tensorflow / core / lib / core / stringpiece.h(34):致命错误C1083:无法打开包含文件:'absl / strings / string_view.h':没有这样的文件或目录( 编译源文件D:\ work \ tensorflow \ tensorflow \ core \ lib \ core \ coding.cc)[D:\ work \ tensorflow \ tensorflow \ contrib \ cmake \ build \ tf_core_lib.vcxproj]

    >
  9. 我通过以下方法解决了上述错误:https://github.com/tensorflow/tensorflow/issues/22007#issuecomment-424553600

  10. 执行上述操作最终导致此错误: path.obj:错误LNK2019:未解析的外部符号“ void __cdecl absl :: base_internal :: ThrowStdOutOfRange(char const *)”(?ThrowStdOutOfRange @ base_internal @ absl @@ YA XPEBD @ Z)在函数“类std :: basic_string,类std :: allocator> __cdecl tensorflow :: io :: internal :: JoinPathIm

  11. 中引用

我无法继续进行。任何解决方法?谢谢!

2 个答案:

答案 0 :(得分:0)

当您直接在源代码中使用的链接不正确时,会发生

lnk2019错误。请向您的项目中添加其他依赖项。

  • 去项目属性
  • 选择C / C ++选项
  • 添加其他依赖项
  • 转到C / C ++下的链接器选项
  • 在此处添加其他依赖项。

解决LNK2019问题可能对您有帮助

view this to understand LNK2019 error.

答案 1 :(得分:0)

我遇到了同样的问题,我认为tensorflow新版本不支持CMake,但是我们可以解决问题。 1.似乎项目文件夹中的absl版本已过期,因此我从以下位置克隆了abseil-cpp的最新版本:https://github.com/abseil/abseil-cpp 2.使用cmake构建abseil-cpp,它将很快。 3.将lib路径添加到tensorflow依赖项,所需的路径将是D:\ git \ abseil-cpp \ abseil-cpp \ build \ absl \ base \ Release \ absl_absl_throw_delegate.lib 4.如果遇到其他链接错误,则可以在absl源代码中找到函数名称,并找到包含它的库。 希望这对您和将来可能遇到此问题的人有所帮助。