1. 程式人生 > >tensorflow之編譯使用c/c++動態連結庫

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的安裝包已經安裝了一些依賴。