Я пытаюсь выполнить кросс-компиляцию с помощью bazel, но не удалось выполнить фатальную ошибку в platform.h, файл mutex не найден. Я могу построить с помощью bazel без настройки кросс-компиляции, и я могу выполнить двоичный файл на хосте.
Моя среда ниже
- цель: arm-linux-gnueabihf
- tenorflow: Глава мастера cd5f3b67fca88217776522182481b0c128db5af9
- bazel: 0.5.4 устанавливается с помощью apt-get install
- # P5 #
# P6 #
Мой тестовый код ниже.
#define EIGEN_USE_THREADS
#define EIGEN_USE_CUSTOM_THREAD_POOL
#include <iostream>
#include "third_party/eigen3/unsupported/Eigen/CXX11/Tensor"
#include "tensorflow/compiler/aot/tests/test_graph_tfmatmul.h" // generated
int main(int argc, char** argv) {
Eigen::ThreadPool tp(2); // Size the thread pool as appropriate.
Eigen::ThreadPoolDevice device(&tp, tp.NumThreads());
foo::bar::MatMulComp matmul;
matmul.set_thread_pool(&device);
// Set up args and run the computation.
const float args[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
std::copy(args + 0, args + 6, matmul.arg0_data());
std::copy(args + 6, args + 12, matmul.arg1_data());
matmul.Run();
// Check result
if (matmul.result0(0, 0) == 58) {
std::cout << "Success" << std::endl;
} else {
std::cout << "Failed. Expected value 58 at 0,0. Got:"
<< matmul.result0(0, 0) << std::endl;
}
return 0;
}
Я изменил некоторые файлы для компиляции.
- # P7 #
# P8 #
- Я сделал ошибку при редактировании файла CROSSTOOL. Если вы знаете подробности, см. Ниже.
Ниже приведена команда сборки, которую я сделал.
bazel build --copt = -Wno-c ++ 11-сужение --cxxopt = '- std = c ++ 11' // тензорный поток / компилятор / aot / tests: my_binary --host_crosstool_top = @ bazel_tools // инструменты / cpp : toolchain --crosstool_top = // инструменты / arm_compiler: toolchain --cpu = armeabi-v7a --verbose_failures
Наконец я получаю сообщение об ошибке ниже.
Произошла ошибка в «C ++ компиляция правила '@nsync //: nsync_cpp' не удалось (Выход 1):».
Из-за "./external/nsync//platform/c++11/platform.h:29:10: фатальная ошибка: файл 'mutex' не найден #include"
Файловый мьютекс находится в ./compilers/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/include/c++/4.9.4/mutex.
Я думаю, что указанный выше путь указан в строке вывода сборки «-isystem external / linaroLinuxGcc49Repo / include / c ++ / 4.9.4»
Как я мог указать путь к мьютексу? для кросс-компиляции nsync?
x86-64 ubuntu14.04