2017-06-08 69 views
1

我想用我公司的c編譯器編譯一個非常簡單的Tensorflow程序(它只打印Tensorflow版本),但是我從Tensorflow的官方網站下載的libtensorflow.so與我們的c編譯器不兼容。用定製編譯器編譯Tensorflow程序

我公司的c編譯器幾乎只是一個標準的gcc,但gcc可以編譯該程序,而我們的自定義編譯器不能。我的同事告訴我,我有兩種選擇:(1)用我們的編譯器替換Bazel的編譯器,並使用Bazel編譯程序;(2)先用Bazel編譯程序,然後使用我們的編譯器編譯程序,幷包含pb由Bazel生成的.h文件(因爲那些bazel文件只能由Bazel生成)。

我不知道該怎麼做(!),但我試過了(2)。 (2)的問題是我得到錯誤,說protoc是由舊版本生成的,我不知道如何更改爲正確的版本。

一些額外的信息:(1)操作系統是Linux,(2)我沒有使用sudo命令的權限,(3)我無法訪問系統目錄(例如,/ usr /本地)

是我有什麼希望可以做到這一點?你可能會問,爲什麼不直接與Bazel合作呢?這是因爲我們公司的程序需要由我們公司的模擬器運行,模擬器只接受由我們公司的編譯器生成的程序。

+0

你有沒有嘗試從源代碼編譯Bazel? https://bazel.build/versions/master/docs/install-compile-source.html –

+0

我使用二進制安裝程序(.sh)來安裝Bazel。從源頭編譯Bazel會有所作爲嗎? –

回答

1

您唯一的選擇是與Bazel建立tensorflow,並告訴Bazel使用您的C/C++編譯器。最簡單的方法是將CC和CXX環境變​​量設置爲指向您的編譯器的可執行文件。如果它真的是GCC的替代品,那麼它應該可以工作,並且在構建之後,您應該得到一個用您的定製編譯器編譯的tensorflow二進制文件。

如果需要特殊標記,那麼你應該在Bazel中做一個自定義工具鏈來告訴它如何使用你的編譯器,它有點複雜但不是很多。說明是在https://github.com/bazelbuild/bazel/wiki/Building-with-a-custom-toolchain

+0

其他來源說,我只能編輯tools/cpp/CROSSTOOL,而不需要按照教程中的說明來完成整個工作。有CROSSTOOL和CROSSTOOL.tpl。我應該修改哪一個?另外,我需要做些什麼來告訴Bazel使用我修改過的CROSSTOOL?我試圖用compile.sh編譯Bazel,但Bazel無視我在CROSSTOOL中改變的所有內容。 –