tenorflow и bazel «неопределенная ссылка на» ошибка компиляции

Я пишу код на C ++ в тензорном фреймворке и хочу использовать динамическую библиотеку, написанную с использованием make-файла.
В исходном коде я положил путь к файлу заголовка:

#include "tensorflow/cc/include/libtrading/proto/tf_fix_client.h"

использовать функцию с именем fix_client (int argc, char ** argv)
и в файле BUILD я положил путь к динамической библиотеке, которая называется libtrading.so:

cc_binary(
name = "session",
srcs = ["work/session.cc"],
copts = tf_copts(),
linkopts = [
"-lpthread",
"-lm",
#for libtrading
"-L/home/alessandro_mercadante/tensor_flows/tensorflow/tensorflow/cc/include/",
"-ltrading",
],
...

bazel-build возвращает мне ошибку:

bazel-out/local_linux-opt/bin/tensorflow/cc/_objs/session/tensorflow/cc/work/session.o: In function `main':
session.cc:(.text.startup.main+0x2b): undefined reference to `fix_client(int, char**)'
collect2: error: ld returned 1 exit status

1

Решение

Bazel требует, чтобы были объявлены все зависимости, поэтому библиотека TensorFlow должна быть в вашем атрибуте deps. Похоже, что это не тот случай в вашей цели (особенно флаг включения тензорного потока неуместен).

После быстрого просмотра файла сборки TensorFlow, я бы сказал, что для этого нужен следующий атрибут deps:

 deps = [
"//tensorflow/cc:cc_ops",
"//tensorflow/core:kernels",
"//tensorflow/core:tensorflow",
],

Но я действительно незнаком с самим TensorFlow.

Что такое атрибут deps вашего cc_binary?

2

Другие решения

Я нашел проблему.
Связывание библиотеки в bazel правильное: проблема заключалась в том, что libtrading является библиотекой C, а тензор потока построен в среде c ++: все связанные функции должны быть включены в следующие элементы защиты:

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
2