g++ 中的链接器问题

Linker issue in g++

我有以下 .sh 文件(来自 here)。

g++ -c -pipe -g -std=gnu++11 -Wall -W -fPIC -I. -I./tensorflow
-I./tensorflow/bazel-tensorflow/external/eigen_archive -I./tensorflow/bazel-tensorflow/external/protobuf/src -I./tensorflow/bazel-genfiles -o main.o ./main.cpp

g++  -o Tutorial main.o   -L./tensorflow/bazel-bin/tensorflow
-ltensorflow_cc

cp ./tensorflow/bazel-bin/tensorflow/libtensorflow* .

当我尝试从终端 运行 这个 .sh 文件时出现错误。因此,我一个一个地执行了命令。第一个工作正常,我看到当我 运行 第二个命令( g++ -o Tutorial main.o -L./tensorflow/bazel-bin/tensorflow -ltensorflow_cc) 我收到以下错误。

/usr/bin/ld: main.o: undefined reference to symbol '_ZN10tensorflow3Env19NewRandomAccessFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPSt10unique_ptrINS_16RandomAccessFileESt14default_deleteISA_EE'
libtensorflow_framework.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

我看到了答案 here,我认为它与我的答案密切相关。但我不知道如何让它适应我的问题。

有人可以帮忙吗?

链接器说链接需要共享库 libtensorflow_framework.so(大概是因为 -ltensorflow_cc 依赖它并请求它)但您的命令行中没有给出。这应该通过在末尾添加 -ltensorflow_framework 来解决,如有必要,还可以添加 -L 选项。

我也遇到了同样的错误。

如果您使用的是tensorflow 2,那么您需要link .so.2 文件。您应该在 bazel 构建目录中找到它们。对我来说是: /tmp/bazel/output/execroot/org_tensorflow/bazel-out/k8-opt/bin/tensorflow

我 link 在我的 CMAKE 中使用以下内容编辑了文件: 文件(全球图书馆“${bazel_bin}/tensorflow/*.so.2”) message("LIBRARIES = ${LIBRARIES}")