在OSX El Capitan上构建和链接共享Tensorflow库,从Ruby通过Swig
我正在尝试使用
Swig在
Tensorflow左右帮助构建一个Ruby包装器.目前,我一直在制作共享版本,.so,并将其C/C++头部暴露给Ruby.所以问题是:我如何构建一个包含完整Tensorflow库的libtensorflow.so共享版本,以便它可以作为OSX El Capitan上的共享库使用(注意:/usr/lib /在El Capitan上是只读的)?
背景 在这个ruby-tensorflow项目中,我需要打包一个Tensorflow .bundle文件,但每当我使用irb -Ilib -rtensorflow或尝试运行规范rspec时,我得到的错误是基本数字类型没有定义,但它们是明确定义的here . 我猜这是因为我的.so文件没有正确创建或者某些东西没有按照它应该链接. C / Swig / Bazel不是我强大的一面,我想专注于学习Tensorflow并在Ruby中构建一个好的包装器,但是我很难在这一点上找到那个有趣的部分! 我做了什么: > git clone –recurse-submodules https://github.com/tensorflow/tensorflow 无奈之下,我也经历过几次官方installation from source,但我不知道是不是,最后一次sudo pip安装/tmp/tensorflow_pkg/tensorflow-0.9.0-py2-none-any.whl-step甚至创建共享构建或公开Python接口. 制作original repository并发出我所遵循的指示的阿拉法特人说他的libtensorflow.so在他的Linux机器上是4.5 GB – 所以超过我的OSX机器上共享版本的20倍. UPDATE1:他说他的libtensorflow.so-build是302.2 MB,4.5GB是整个tensorflow文件夹的大小. 非常感谢任何帮助或替代方法! 解决方法
经过更多的挖掘,发现otool(感谢Kristina)并更好地理解
.so 文件是什么,解决方案在我的设置中不需要太多改变:
共享构建 # Clone source files git clone --recurse-submodules https://github.com/tensorflow/tensorflow cd tensorflow # Build library bazel build //tensorflow:libtensorflow.so # Copy the newly shared build/library to /usr/local/lib sudo cp bazel-bin/tensorflow/libtensorflow.so /usr/local/lib 使用Swig从Ruby调用 按照此处的步骤https://github.com/chrhansen/ruby-tensorflow#install-ruby-tensorflow运行Swig,创建一个Makefile并制作 当你运行make时,你应该看到一行说: $make $linking shared-object libtensorflow.bundle 如果您的共享版本无法访问,您会看到以下内容: $ld: library not found for -ltensorflow 简单的教程 对于那些从这个冒险开始,使用Ruby中的C/C++库的人来说,这篇文章对我来说是一个很好的教程:http://engineering.gusto.com/simple-ruby-c-extensions-with-swig/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |