首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Ubuntu 17.10的C/C++源代码构建Tensorflow 1.4.0

用Ubuntu 17.10的C/C++源代码构建Tensorflow 1.4.0
EN

Stack Overflow用户
提问于 2017-11-15 02:37:54
回答 2查看 1.2K关注 0票数 1

我试图从64位Ubuntu 17.10中的C/C++源代码构建Tensorflow 1.4.0。我试着按照Tensorflow网站C++的其他网站中的说明使用Bazel,并将它们总结如下:

代码语言:javascript
复制
cd tensorflow
./configure
(select N for all the options)
bazel build --config=opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" --local_resources 2048,.5,1.0 //tensorflow:libtensorflow_cc.so //tensorflow:libtensorflow_framework.so //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
sudo -H pip3 install /tmp/tensorflow_pkg/tensorflow-1.4.0rc1-cp36-cp36m-linux_x86_64.whl

当我尝试构建一个简单的测试程序并在Eclipse中包含tensorflow/core/public/session.h (将包含路径设置为从git下载的tensorflow根文件夹)时,它抱怨了以下几点:

  1. 在device_attributes.pb.h中缺少GoogleProtobufCommon.h(我不能使用apt-get来安装protobuf,因为它会抱怨版本太老--低于3.0.0.4,在device_attributes.pb.h中签入)。我下载了最新的protobuf并按照说明安装它。
  2. 在tensor.h中缺少特征3的张量文件,其中tensor.h包含tensorflow directory/third_party/eigen3/unsupported/Eigen/CXX11/Tensor,中的tensorflow文件,tensorflow directory/third_party/eigen3/unsupported/Eigen/CXX11/Tensor包含libeigen3-dev提供的丢失的/usr/include/eigen3/unsupported/Eigen/CXX11/Tensor文件。我想安装libeigen3-dev。
  3. 在安装libeigen3-dev之后,我在Eclipse的include路径中添加了/usr/include /本征3,因为tensorflow目录中的张量文件无法在/usr/include中找到该文件(包含额外的eigen3目录)。
  4. 在mutex.h中缺少nsync_cv.h文件。我将tensorflow目录中的nsync文件夹添加到包含路径中。

总之,我在Eclipse中的包含路径中添加了以下路径:

  • tensorflow目录/
  • tensorflow目录/bazel-genfiles
  • tensorflow directory/bazel-tensorflow/external/nsync/public
  • /usr/包括/特征3

我使用以下库添加了库路径tensorflow目录/bazel-bin/tensorflow:

  • tensorflow
  • tensorflow_cc
  • tensorflow_framework

我还在Eclipse的项目设置中将-std=c++11添加到GCC C++编译器和GCC C++链接器中。最后,它遇到了一个链接器错误:

代码语言:javascript
复制
[tensorflow directory]/tensorflow/core/platform/default/logging.h:187: undefined reference to `tensorflow::internal::CheckOpMessageBuilder::NewString[abi::cxx11]()'

我见过一个线程讨论过类似的问题,但我确实设置了-D_GLIBCXX_USE_CXX11_ABI=0和Ubuntu17.10正在使用gcc5或更高版本。

请建议如何修复链接器错误。非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-15 14:12:04

正式地,您必须在tensorflow源代码中创建您的C++项目,编写构建文件并使用bazel编译它。看看

我写了一篇博文:https://tuanphuc.github.io/standalone-tensorflow-cpp/,给出了制作一个独立的C++ Tensorflow与配置的详细说明:- Ubuntu 17.10 - gcc 7.2.0 - tensorflow 1.4.0 - Python 2 or 3 - cmake 3.9.6 - Eigen 3.3.4 - Protobuf (master branch) - Googletest (master branch) - bazel希望它有帮助

参考文献:

独立于bazel的打包TensorFlow C++库

图.pb.h丢失

票数 1
EN

Stack Overflow用户

发布于 2018-08-09 13:37:47

如果你不想过多地修补你的环境,有两种非官方的选择。一种是使用Floop的C++项目编译Floop并在您的系统上安装。另一种可能是为Tensorflow的C和C++ API安装我的打包项目的C++之一。这两个项目都使用CMake (而不是Bazel)来支持源文件的C++编译。

从Tensorflow的角度来看,tensorflow_cc的优点是,如果需要,可以构建GPU支持,而我的项目只能使用CPU进行推理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47298481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档