我应该如何在MacOS上安装TensorFlow C库或以其他方式解决错误:

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




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


语境

我逐字使用“仅macOS CPU”库遵循Mac OS的installation instructions,直到sudo ldconfig位为止。这是Mac,我用update_dyld_shared_cache代替ldconfig并重新启动,然后构建了提供的示例程序。

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


我有:

~$ 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


按照说明的建议,我使用gcc -I/usr/local/include -L/usr/local/lib hello_tf.c -ltensorflow -o hello_tf进行了重建,并得到了相同的结果。

安装说明说要设置LIBRARY_PATHDYLD_LIBRARY_PATH以便在非系统目录中进行安装。我决定试一试:

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


现在使用两种方法(即不使用-I/usr/local/include -L/usr/local/lib和使用/usr/local/lib)进行编译都可以得到:

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


(嗯,至少是一个不同的错误。)

我的libtensorflow.dylib包含TensorFlow文件:

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


libtensorflow.1.dyliblibtensorflow.1.14.0.dylib是指向libtensorflow_framework.dylib的链接,而libtensorflow_framework.1.dyliblibtensorflow.1.14.0.dylib同样也指向.tar.gz,如提供的存档中所示。

期望的结果

主要的预期效果是发生以下情况:

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


(这就是我使用的版本。)

次要的预期效果是理解为什么发生上述错误。

最佳答案

我通过使用Homebrew进行安装,将/usr/local/lib添加到LD_LIBRARY_PATH并使用-ltensorflow标志作为GCC最后一个参数进行编译来修复该问题。 dyld似乎很挑剔。如果可能的话,我仍然希望有一个更好的解释。

~$ 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


这也不适用于问题中提到的对DYLD_LIBRARY_PATHLIBRARY_PATH的修改。

/usr/local/lib或某些构建脚本中将LD_LIBRARY_PATH添加到~/.bash_profile可能是明智的。

关于c - 在MacOS上安装的TensorFlow C错误?:dyld错误“未加载库:@ rpath/libtensorflow.1.dylib”和“未找到符号:__cg_DGifCloseFile”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57916950/

10-12 17:19