gpt4 book ai didi

tensorflow - 从 tensorflow_cc 和 tensorflow_framework 生成静态库

转载 作者:行者123 更新时间:2023-12-04 01:43:34 27 4
gpt4 key购买 nike

据我所知,使用 bazel 我只能生成 libtensorflow_cc.solibtensorflow_framework.so。我需要生成与位置无关 (-fPIC) 的静态库,因为稍后我会将它们链接到我自己的动态库。

我找到了 this answer这建议使用项目中包含的 Makefile。我成功地用它替换了 libtensorflow_cc.so 但我可以做什么来替换 libtensorflow_framework.so

最佳答案

不是真正的答案,但评论太长了。

我设法在 Windows 上使用 Bazel 完成了您提到的事情。特别是,我想制作一个带有一个或两个 header (功能有限)的包装器 DLL,我可以轻松地四处移动。我会写一个我所做的事情的总结;为我们的需求定制的内容相当复杂,但也许您会发现一些有用的东西。

  • 我将 --config=monolithic 传递给 bazel build 命令(除了您需要的任何其他选项)。这将避免模块化库,从而消除对 libtensorflow_framework.so 的依赖(参见 tools/bazel.rc ).
  • 我构建的目标不是 TensorFlow 存储库中的任何目标。相反,我添加了一个非常小的程序,它使用我的包装器作为新的 Bazel 目标(一个 C++ 文件加上我的 header 和一个 BUILD 文件)。因此,必须预先编译所有 TensorFlow,才能编译这个最终的虚拟程序。
  • 当我完成这项工作时,我利用了 Bazel 已经将每个子目标编译为静态库这一事实。我检查了为我的虚拟程序目标生成的 bazel-bin 目录下的文件,其名称以 .params 结尾 - 我找到了所有使用的静态库的路径编译它。
  • 我将所有这些中间静态库复制到其他地方。另外,我复制了一堆头文件,我将需要编译我的最终包装器(TensorFlow 自己的,现在还有 Eigen、Protobuf 和 Nsync)。我把所有这些都放在我之前准备好的构建区域中。
  • 我使用 NMake Makefile 生成我的自定义 DLL,使用静态库、复制的 header 和我自己的瘦包装器。

我想就是这样了。我有一个丑陋的 Bash 脚本,我在 MSYS2 上运行,它为我做了一切。通常对于每个新版本我都需要调整一两件事(configure 脚本中的一些选项,我需要复制一些额外的 header ,等等),但我最终还是让它工作了.不过,这是相当多的摆弄,所以我并不是说您应该使用相同的方法(但如果您愿意,可以随时询问有关任何步骤的详细信息)。

关于tensorflow - 从 tensorflow_cc 和 tensorflow_framework 生成静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com