tensorflow和bazel“;未定义的引用;编译错误 我在TysFraseFrand框架中编写C++代码,我想使用一个使用MaFILE文件编写的动态库。 在源代码中,我将路径放在头文件中: #include "tensorflow/cc/include/libtrading/proto/tf_fix_client.h"

tensorflow和bazel“;未定义的引用;编译错误 我在TysFraseFrand框架中编写C++代码,我想使用一个使用MaFILE文件编写的动态库。 在源代码中,我将路径放在头文件中: #include "tensorflow/cc/include/libtrading/proto/tf_fix_client.h",c++,tensorflow,bazel,C++,Tensorflow,Bazel,使用名为fix_client(int argc,char**argv)的函数 在构建文件中,我放置了动态库的路径,称为libtrading.so: cc_binary( name = "session", srcs = ["work/session.cc"], copts = tf_copts(), linkopts = [ "-lpthread", "-lm", #for libtrading "-

使用名为fix_client(int argc,char**argv)的函数 在构建文件中,我放置了动态库的路径,称为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

Bazel要求声明所有依赖项,因此TensorFlow库应该位于deps属性中。看起来您的目标并非如此(尤其是tensorflow includes的标志不合适)

快速查看TensorFlow构建文件后,我想说它需要以下deps属性:

 deps = [
     "//tensorflow/cc:cc_ops",
     "//tensorflow/core:kernels",
     "//tensorflow/core:tensorflow",
 ],
但我对TensorFlow本身并不熟悉

您的cc_二进制文件的deps属性是什么?

我发现了问题。 BAZEL中的链接是正确的:问题是LIBuff交易是C库,TysFooFLASH是在C++环境中构建的:所有链接的函数需要包含在以下的防护:

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

这不是加载程序的问题,而是链接器的问题,因此我认为这不是您猜测的问题。可能重复:。是的,库的位置没有错误。这不是一个错误。我知道未定义引用问题背后的概念。我认为这与使用挡板有关。我希望有人在bazel汇编方面能给这个问题提供一些有用的建议。我发现问题只是把C库链接到C++代码的问题。