Faulty TensorFlow C install on MacOS?: dyld errors “Library not loaded: @rpath/libtensorflow.1.dylib” and “Symbol not found: __cg_DGifCloseFile”

筅森魡賤 提交于 2021-02-19 09:01:27

问题


Question

How should I install the TensorFlow C library on MacOS or otherwise address the errors:

dyld: Library not loaded: @rpath/libtensorflow.1.dylib
  Referenced from: /Users/Me/./hello_tf
  Reason: image not found
Abort trap: 6

and

dyld: Symbol not found: __cg_DGifCloseFile
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /usr/local/lib/libGIF.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Abort trap: 6

Context

I followed the installation instructions for MacOS using the “macOS CPU only” library verbatim until the sudo ldconfig bit. This being Mac, I substituted update_dyld_shared_cache for ldconfig and restarted, then built the example program provided.

#include <stdio.h>
#include <tensorflow/c/c_api.h>
int main() {
  printf("Hello from TensorFlow C library version %s\n", TF_Version());
  return 0;
}

I got:

~$ gcc hello_tf.c -ltensorflow -o hello_tf
~$ ./hello_tf
dyld: Library not loaded: @rpath/libtensorflow.1.dylib
  Referenced from: /Users/Me/./hello_tf
  Reason: image not found
Abort trap: 6

Following the instructions’ advice, I rebuild with gcc -I/usr/local/include -L/usr/local/lib hello_tf.c -ltensorflow -o hello_tf and got the same result.

The installation instructions say to set LIBRARY_PATH and DYLD_LIBRARY_PATH for installs in non-system directories. I decided to give it a shot:

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/lib

Compiling with both methods (that is, without and with -I/usr/local/include -L/usr/local/lib) now give me:

dyld: Symbol not found: __cg_DGifCloseFile
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /usr/local/lib/libGIF.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Abort trap: 6

(Well, at least it’s a different error.)

My /usr/local/lib contains the TensorFlow files:

libtensorflow.1.14.0.dylib
libtensorflow.1.dylib
libtensorflow.dylib
libtensorflow_framework.1.14.0.dylib
libtensorflow_framework.1.dylib
libtensorflow_framework.dylib

libtensorflow.dylib and libtensorflow.1.dylib are links that point to libtensorflow.1.14.0.dylib, and libtensorflow_framework.dylib and libtensorflow_framework.1.dylib likewise point to libtensorflow.1.14.0.dylib, as in the provided .tar.gz archive.

Desired Outcome

The primary desired effect is that the following occurs:

~$ gcc hello_tf.c -ltensorflow -o hello_tf
~$ ./hello_tf
Hello from TensorFlow C library version 1.14.0

(That’s the version I’m using.)

A secondary desired effect is understanding of why the mentioned errors occurred.


回答1:


I fixed it by installing with Homebrew, adding /usr/local/lib to LD_LIBRARY_PATH, and compiling with the -ltensorflow flag as the last of the GCC arguments. It seems dyld is rather picky; if possible, I’d still like to have a better explanation than that.

~$ brew install libtensorflow
 # Homebrew output omitted
~$ export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib"
~$ gcc hello_tf.c -o hello_tf -ltensorflow
~$ ./hello_tf
TensorFlow C lib version 1.14.0

This also didn’t work with the modifications to DYLD_LIBRARY_PATH and LIBRARY_PATH mentioned in the question.

It might be wise to add /usr/local/lib to LD_LIBRARY_PATH in ~/.bash_profile or some build script.



来源:https://stackoverflow.com/questions/57916950/faulty-tensorflow-c-install-on-macos-dyld-errors-library-not-loaded-rpath-l

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!