J'ai suivi ce guide à installer sur mon macbook pro El Capitan, en utilisant CMake pour créer le fichier makefile. Cependant, lorsque j'essaie de créer, je rencontre l'erreur de manquer le fichier cblas.h. J'ai réinstallé avec succès openblas avec:
$ brew uninstall openblas; brew install --fresh -vd openblas
et en ajoutant les deux drapeaux de construction:
LDFLAGS: -L/usr/local/opt/openblas/lib
CPPFLAGS: -I/usr/local/opt/openblas/include
Cependant, j'obtiens toujours l'erreur. Ensuite, j'ai réinstallé les outils d'installation CUDA et xcode-select comme recommandé here .
Toutes les recommandations/autres spéculations sur la raison pour laquelle make ne voit pas mon fichier cblas.h sont appréciées!
Dans votre question, je vois cmake
, mais dans le lien fourni Makefile.config
.
Si vous voulez toujours continuer avec cmake :
tout d'abord, le script de construction n'est PAS endommagé - je l'ai essayé sur Yosemite avec le dernier fichier master branch (2016-02-25), mais vous devez l'ajuster légèrement si vous avez déjà créé
brew uninstall openblas; brew install --fresh -vd openblas
Il suffit de lancer votre cmake avec des arguments supplémentaires:
cmake -DCMAKE_CXX_FLAGS=-I/usr/local/opt/openblas/include <path to your sources>
puis make ou xcode habituel (dépend du générateur que vous utilisez).
Après cela, il a été construit avec succès sur mon système.
UPD: vous pouvez également utiliser des bibliothèques dans Accelerate.framework
(vecLib
) au lieu de openblas .
Allez au Makefile.config
et éditez les lignes suivantes avec le chemin où se trouve votre openblas, dans mon cas la version est 0.2.18_2
Assurez-vous de ne pas commenter ces lignes:
BLAS_INCLUDE := /usr/local/Cellar/openblas/0.2.18_2/include
BLAS_LIB := /usr/local/Cellar/openblas/0.2.18_2/lib
Décommentez ces lignes dans Makefile.config:
# Homebrew puts openblas in a directory that is not on the standard search path
BLAS_INCLUDE := $(Shell brew --prefix openblas)/include
BLAS_LIB := $(Shell brew --prefix openblas)/lib
J'ai moi-même rencontré ce problème aujourd'hui et j'ai soumis une demande d'attraction à Caffe:
https://github.com/BVLC/caffe/pull/4247
Pour moi, le problème était que Caffe trouvait le framework vecLib obsolète (qui ne livre pas cblas.h) au lieu du nouveau framework Accelerate (qui vend cblas.h).
Dans Makefile.config
:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/opt/openblas/include/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/opt/openblas/lib/
Pas sûr que ce soit la solution la plus élégante, mais ça marche.
Pour mon installation Caffe, c'était ma configuration:
Le répertoire de mon fichier cblas.h
(via la recherche dans le Finder): /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Headers
Ajoutez ce chemin cblas.h à ./caffe/Makefile.config
:
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Headers/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
Notes complémentaires
Également pour moi, j'avais OpenBlas. Peut avoir un impact sur votre situation.
# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := open
J'ai aussi modifié ./caffe/Makefile
avec le chemin cblas.h, mais je ne suis pas sûr que cela soit nécessaire/fait une différence.
else ifeq ($(BLAS), open)
# OpenBLAS
LIBRARIES += openblas
BLAS_INCLUDE ?= /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Headers/
Résultat obtenu
L'erreur d'origine a disparu:
Tams-MacBook-Pro:caffe tamtam$ make all
CXX src/caffe/blob.cpp
In file included from src/caffe/blob.cpp:7:
In file included from ./include/caffe/util/math_functions.hpp:11:
./include/caffe/util/mkl_alternate.hpp:14:10: fatal error: 'cblas.h' file not found
#include <cblas.h>
^
1 error generated.
make: *** [.build_release/src/caffe/blob.o] Error 1
Mais l'erreur suivante résolue était (la fin de la sortie):
CXX src/caffe/util/upgrade_proto.cpp
AR -o .build_release/lib/libcaffe.a
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_conv_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_lcn_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_lrn_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_pooling_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_relu_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_sigmoid_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_softmax_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn_tanh_layer.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(parallel.o) has no symbols
/Applications/Xcode833.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: .build_release/lib/libcaffe.a(cudnn.o) has no symbols
LD -o .build_release/lib/libcaffe.so.1.0.0-rc5
clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
ld: warning: directory not found for option '-L/lib'
ld: library not found for -lopenblas
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [.build_release/lib/libcaffe.so.1.0.0-rc5] Error 1
Ce que je corrige/résout/modifie via ceci dans Makefile.config
:
# Homebrew puts openblas in a directory that is not on the standard search path
BLAS_INCLUDE := $(brew --prefix openblas)/include /usr/local/Cellar/openblas/0.3.3/include
BLAS_LIB := $(brew --prefix openblas)/lib /usr/local/Cellar/openblas/0.3.3/lib
J'ai également résolu l'avertissement -pthread
via ceci dans Makefile
:
CXXFLAGS += -fPIC $(COMMON_FLAGS) $(WARNINGS) -std=c++11 #rm'd -pthread
LINKFLAGS += -fPIC $(COMMON_FLAGS) $(WARNINGS) -std=c++11 #rm'd -pthread
Avec un autre make clean
, cp Makefile.config.example Makefile.config
et make all
, il s'agit de la fin de la sortie et de la même manière du Gist complet de la sortie:
In file included from ./include/caffe/caffe.hpp:12:
./include/caffe/net.hpp:41:5: warning: unused typedef 'INVALID_REQUESTED_LOG_SEVERITY' [-Wunused-local-typedef]
LOG_EVERY_N(WARNING, 1000) << "DEPRECATED: ForwardPrefilled() "
^
/usr/local/include/glog/logging.h:943:30: note: expanded from macro 'LOG_EVERY_N'
INVALID_REQUESTED_LOG_SEVERITY); \
^
1 warning generated.
CXX/LD -o .build_release/examples/cpp_classification/classification.bin
ld: warning: directory not found for option '-L/lib'
CXX examples/mnist/convert_mnist_data.cpp
CXX/LD -o .build_release/examples/mnist/convert_mnist_data.bin
ld: warning: directory not found for option '-L/lib'
CXX examples/siamese/convert_mnist_siamese_data.cpp
CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin
ld: warning: directory not found for option '-L/lib'
Il semble donc que make all
ait été construit avec succès, en supposant que cette erreur -L/lib
ne causera plus de problèmes par la suite. Remarque: make all
, make test
et make runtest
fonctionnent correctement avec seulement les avertissements générés. make pycaffe
a cependant généré d'autres erreurs; Je pourrais créer un lien vers mes solutions plus tard. En outre, oui, cette réponse est longue et va bien au-delà de ce que le PO a demandé, mais j'espère que ma réponse pourrait aider quelqu'un d'autre dans ce processus d'installation épouvantable.