2015-11-24 5 views
1

Я пишу код C++ в frameworkor framework, и я хочу использовать динамическую библиотеку, написанную с помощью makefile. В исходном коде я поставил путь заголовка файла:tensorflow и bazel «неопределенная ссылка на» ошибка компиляции

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

использовать функцию под названием fix_client (INT ARGC, символ ** 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-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 
+0

Это не проблема загрузчика, но линкера, поэтому я думаю, что это не проблема, о которой вы догадались. –

+1

Возможный дубликат: [Что такое неопределенная ссылка и как ее решить] (http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how -do-I-FIX). –

+0

Да, в местоположении библиотеки нет ошибки. Это не ошибка. –

ответ

2

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

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

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

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

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

+0

Я положил провалы, которые вы указали. Я обнаружил, что проблема была просто проблемой связывания библиотеки C с кодом на C++. –

2

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

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