g++ 中的链接器问题

Linker issue in g++

提问人:Satinger 提问时间:3/27/2018 更新时间:7/30/2020 访问量:423

问:

我有以下.sh文件(从这里)。

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 教程 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

在这里看到了答案,我认为它与我的答案密切相关。但我无法弄清楚如何使它适应我的问题。

有人可以帮忙吗?

链接器 G++ 未定义引用

评论

0赞 Satinger 3/27/2018
@PythEch我这样做了,在我的 tensorflow 文件夹中创建了一些文件夹(bazel-bin、bazel-genfiles、bazel-out、bazel-tensorflow 和 bazel-testlogs)。这是对的吗?
0赞 Mike Kinghan 3/27/2018
链接器说链接需要共享库(大概是因为依赖于它并请求它),但命令行中没有给出。这应该通过在末尾添加来解决,必要时还可以使用其他选项。libtensorflow_framework.so-ltensorflow_cc-ltensorflow_framework-L
0赞 Satinger 3/27/2018
@MikeKinghan非常感谢,我希望它能起作用。我现在不在,明天测试时会通知你。
0赞 Satinger 3/27/2018
@MikeKinghan非常感谢它奏效了。如果您可以将其添加为答案,我可以将其标记为正确。再次感谢你。
0赞 Mike Kinghan 3/27/2018
不客气。让它成为一个答案。

答:

2赞 Mike Kinghan 3/27/2018 #1

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

0赞 s510 7/30/2020 #2

我也遇到了同样的错误。

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

我在CMAKE中使用以下内容链接了文件: 文件(GLOB 库 “${bazel_bin}/tensorflow/*.so.2”) message(“库 = ${LIBRARIES}”)