tensorflow 编译c++ 可执行文件

用tensorflow的api完成的程序,在部署的时候,可能会遇到需要隐藏代码的情况,通过调用c的api编写tensorflow程序,然后再编译成.out文件可完成这一功能。


可以直接参考官方文档:https://www.tensorflow.org/install/install_c



因为我这边已经按照前面的博客从源码安装了tensorflow(如源码安装tensorflow之一:cntlm代理配置和tensorflow源码安装之二:bazel安装、源码编译),故这里的步骤和官网的步骤不太一致。



确保已经从源码安装tensorflow成功之后,主要有如下几个步骤:



1、进入到tensorflow安装包目录下,tensorflow-master/tensorflow

执行如下命令:


bazel build :libtensorflow.so
生成c对应的so库,如果需要生成c++对应的so库,则需要执行如下的命令:
bazel build :libtensorflow_cc.so

2、生成so库之后,需要准备相应的lib和include文件

在/usr/local/include中新建目录 tf

sudo mkdir tf
进入到tensorflow-master目录下,把相关文件复制到/usr/local/include/tf中

cp -r bazel-genfiles /usr/local/include/tf
cp -r tensorflow /usr/local/include/tf
cp -r third_party /usr/local/include/tf
再把so库复制到/usr/local/lib目录中

cp bazel-bin/tensorflow/libtensorflow.so /usr/local/lib
cp bazel-bin/tensorflow/libtensorflow_framework.so /usr/local/lib

这里可能需要执行命令 sudo ldconfig

3、验证是否可编译成功
随便在一个目录下,新建helloTF.c文件,填入代码如下:

#include <stdio.h>
#include <tf/tensorflow/c/c_api.h>

int main(){
    printf("Hello from Tensorflow C library version %s\n",TF_version());
    return 0;
}


然后开始用gcc编译程序

gcc -I /usr/local/include/ -L /usr/local/lib/ helloTF.c -ltensorflow
编译成功后,就可以直接运行.out程序

./a.out

在编译的时候,碰到过一个问题

这个问题,在于,复制文件的时候,没有把libtensorflow_framework.so复制到/usr/local/lib中。


从这一步来看,已经可以正常的运行起来了。那么如何才能在其它机器上跑起来呢?


4、移植到其它机器运行


4.1 首先把libtensorflow.so和libtensorflow_framework.so复制到其它机器上的/usr/local/lib中
4.2 执行命令,sudo ldconfig
4.3 复制a.out文件到其它机器上
4.4 运行./a.out





参考链接:

http://blog.csdn.net/hjimce/article/details/51899683
https://www.tensorflow.org/install/install_c
https://www.cnblogs.com/hrlnw/p/7383951.html
https://www.cnblogs.com/hrlnw/p/7007648.html
http://blog.csdn.net/rockingdingo/article/details/75452711

对于Ubuntu 18.04,你可以使用以下步骤在C++中使用TensorFlow库: 1. 安装依赖项: ``` sudo apt-get update sudo apt-get install build-essential curl sudo apt-get install libcurl3-dev libfreetype6-dev libpng-dev libzmq3-dev pkg-config sudo apt-get install python3-dev python3-pip python3-wheel python3-setuptools ``` 2. 安装TensorFlow C++库: - 通过pip安装TensorFlow C++库: ``` pip3 install tensorflow ``` - 或者,从源代码构建TensorFlow C++库: - 克隆TensorFlow仓库: ``` git clone https://github.com/tensorflow/tensorflow.git cd tensorflow ``` - 配置构建选项并构建TensorFlow C++库: ``` ./configure bazel build --config=opt //tensorflow:libtensorflow_cc.so ``` - 在.bashrc或.bash_profile文件中设置LD_LIBRARY_PATH环境变量: ``` export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/tensorflow/bazel-bin/tensorflow/ ``` 3. 编写C++代码并链接TensorFlow库: - 创建一个C++文件,比如example.cpp,并添加以下代码: ```cpp #include <tensorflow/cc/client/client_session.h> #include <tensorflow/cc/ops/standard_ops.h> #include <tensorflow/core/framework/tensor.h> int main() { using namespace tensorflow; using namespace tensorflow::ops; Scope root = Scope::NewRootScope(); auto A = Const(root, { {3.f, 2.f}, {-1.f, 0.f} }); auto b = Const(root, { {3.f, 5.f} }); auto product = MatMul(root.WithOpName("product"), A, b, MatMul::TransposeB(true)); std::vector<Tensor> outputs; ClientSession session(root); TF_CHECK_OK(session.Run({product}, &outputs)); for (const auto& tensor : outputs) { std::cout << tensor.matrix<float>() << std::endl; } return 0; } ``` - 编译C++代码: ``` g++ -std=c++11 -I/path/to/tensorflow -L/path/to/tensorflow/bazel-bin/tensorflow example.cpp -ltensorflow_cc -o example ``` - 运行生成的可执行文件: ``` ./example ``` 这样,你就可以在Ubuntu 18.04上使用C++编写和运行TensorFlow代码了。请确保将`/path/to/tensorflow`替换为你实际的TensorFlow安装路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值