tensorflow之編譯使用c/c++動態連結庫
tensorflow主流介面雖然是python,但是其也支援C語言的介面供大家呼叫,並且對於影象處理等方面c++是一種更為合適的語音。因此本文主要介紹一下如何安裝並使用c版本的tensorflow。
一、 編譯。
編譯的目的主要是為了產生對應的標頭檔案和動態連結so檔案。編譯的方式有兩種:
1. bazel build --config=opt //tensorflow/tools/lib_package:libtensorflow。然後在bazel-bin/tensorflow/tools/lib_package/目錄下存在一個libtensorflow.tar.gz的壓縮包。該壓縮包中存在一個include資料夾和一個lib資料夾這兩個資料夾就是tensorflow執行c程式所需要的標頭檔案和動態連結檔案。關於如何安裝使用bazel請參考基於原始碼編譯的那篇文章內容。
2. 直接下載編譯好的檔案。執行:
curl -L "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.8.0.tar.gz" | sudo tar -C /usr/local -xz
該執行可以下載現有的litensorflow檔案壓縮包。並將其解壓縮到/usr/local目錄下。
二、配置
編譯完成後需要將對應的include和lib放入相應的資料夾中,在此也有兩種方式:
1. 放入到系統資料夾中,即/usr後面對應的include和lib,然後執行sudo ldconfig
2. 放入到自己資料夾中,我放入的是/usr/local下面的include和lib中。此時一定要注意新增LD_LIBRARY_PATH不然會無法連結到動態庫。即: LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH;export LD_LIBRARY_PATH。
三、驗證
使vi寫入一段程式碼:Hellow_tf.c
#include <stdio.h> #include <tensorflow/c/c_api.h> int main() { printf("Hello from TensorFlow C library version %s\n", TF_Version()); return 0; }
然後執行:gcc -I/usr/local/include -L/usr/local/lib Hellow_tf.c -ltensorflow。此時在資料夾中會產生一個a.out檔案。直接./a.out就會出現Hello from TensorFlow C library version 1.8.0。
四、關於錯誤。
如果在執行a.out時報./a.out: error while loading shared libraries: libtensorflow.so: cannot open shared object file: No such file or directory則表示找不到動態連結庫,此時需要加入LD_LIBRARY_PATH
五、關於其他依賴
有許多部落格介紹說還需要tensorflow/contrib/makefile資料夾下的build_all_linux.sh,我沒有使用。個人感覺不需要也不知道是不是由於我使用原始碼編譯過tensorflow的安裝包已經安裝了一些依賴。