一尘不染

TensorFlow for Go演示示例运行失败

go

我有问题。

环境

macbookpro:lib fredlee$ go version
go version go1.8.3 darwin/amd64
macbookpro:lib fredlee$ pwd
/usr/local/lib
macbookpro:lib fredlee$ ls -alh libtensorflow.so
-r-xr-xr-x  1 root  wheel   102M  1  1  1970 libtensorflow.so
macbookpro:lib fredlee$ file libtensorflow.so
libtensorflow.so: Mach-O 64-bit dynamically linked shared library x86_64
macbookpro:lib fredlee$

问题

> macbookpro:~ fredlee$ go get
> github.com/tensorflow/tensorflow/tensorflow/go macbookpro:~ fredlee$
> go test github.com/tensorflow/tensorflow/tensorflow/go
> # github.com/tensorflow/tensorflow/tensorflow/go ld: library not found for -ltensorflow clang: error: linker command failed with exit code 1
> (use -v to see invocation)
> FAIL  github.com/tensorflow/tensorflow/tensorflow/go [build failed]

任何人都可以帮助我使它起作用?


阅读 298

收藏
2020-07-02

共1个答案

一尘不染

错误很明显:

ld:找不到用于-ltensorflow的库

运行时,go test您将调用go编译器来编译所需的库,测试文件,然后执行它们。

当编译使用“非纯” go库的程序时,必须使编译器(和链接程序)知道该库。

在编译阶段,编译器也在环境变量中列出的路径中查找库(也):

LIBRARY_PATH 在OS X和Linux上。

因此,您必须在此变量中添加已编译库的位置。

例如,我有:

TFGOLIB="${GOPATH}/src/github.com/tensorflow/tensorflow/bazel-bin/tensorflow"
export LIBRARY_PATH="${TFGOLIB}:${LIBRARY_PATH}"

相反,在运行时,操作系统会寻找该库以执行动态链接。

因此,您必须将此另一个变量(LD_LIBRARY_PATH在Linux和DYLD_LIBRARY_PATHOS X上)设置为相同位置。

此外,我建议您也将CUDA库路径添加到此变量,以使其在运行时可用。

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/cuda/lib64:/opt/cuda/extras/CUPTI/lib64:/opt/cudnn5.1/cuda/lib64:${TFGOLIB}"
2020-07-02