题
我应该如何在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_PATH
和DYLD_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.dylib
和libtensorflow.1.14.0.dylib
是指向libtensorflow_framework.dylib
的链接,而libtensorflow_framework.1.dylib
和libtensorflow.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_PATH
和LIBRARY_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/