Я недавно модифицировал Кафе Файл примера классификации C ++ и я пытаюсь перекомпилировать это. Однако у меня возникают проблемы с компоновкой простой компиляции g ++ с файлами .hpp в каталоге include. Я знаю, что это основной вопрос, но я не могу решить его — может кто-нибудь помочь мне решить, как скомпилировать эту программу? Компиляция теперь выглядит так:
g++ -I /home/jack/caffe/include classification.cpp -o classify
Но я получаю эту ошибку:
In file included from /home/jack/caffe/include/caffe/common.hpp:19:0,
from /home/jack/caffe/include/caffe/blob.hpp:8,
from /home/jack/caffe/include/caffe/caffe.hpp:7,
from classification.cpp:1:
/home/jack/caffe/include/caffe/util/device_alternate.hpp:34:23: fatal error: cublas_v2.h: No such file or directory
#include <cublas_v2.h>
Я запускаю это на машине без графических процессоров Nvidia, поэтому, когда я посмотрел на файл device_alternate.hpp, я понял, что это также вызывает много связанных с cuda файлов .hpp, которые не существуют.
Обычно, чтобы помочь компилятору найти заголовочные файлы, вам нужно добавить -I /path/to/include/folder
вариант строки компиляции:
~$ g++ -I /path/to/caffe/include myfile.cpp
Если вы хотите создавать собственные файлы в caffe, есть два способа
Легкий способ
make
, Это автоматически добавит необходимые cxxflags и ldflags, скомпилирует ваш код и поместит исполняемый файл в папку build / examples / test. Это также обеспечивает флаг CPU_ONLY установлен (как указано в Makefile.config )Трудный путь
Надеюсь это поможет
редактировать
Поскольку операционная система запросила простой способ, это можно сделать следующим образом
Это очень минимальный пример и я призываю ОП обратиться к полной онлайн-документации и примеру использования cmake.
Теперь я предполагаю, что у вас есть структура проекта следующим образом.
-project
- src
- class1.cpp
- CMakeLists.txt ( to be added )
- include
- class1.hpp
- main.cpp
- CMakeLists.txt ( to be added )
CMakeLists.txt (src) должен содержать (как минимум) следующие строки,
cmake_minimum_required(VERSION 2.8)
find_package(OpenCV REQUIRED) # Optional in case of dependency on opencv
add_library( c1 class1.cpp )
Замечания: В случае, если class1 зависит от других внешних библиотек, путь к заголовкам должен быть включен с помощью include_directories
,
CMakeLists.txt (самый внешний) должен содержать следующее в минимальный
cmake_minimum_required(VERSION 2.8)
PROJECT(MyProject)
find_package(OpenCV REQUIRED)
find_package(Caffe REQUIRED)
include_directories( "${PROJECT_SOURCE_DIR}/include" )
add_subdirectory( src )
include_directories( "$Caffe_INCLUDE_DIRS}" )
add_executable(MyProject main.cpp)
target_link_libraries( MyProject ${OpenCV_LIBS} c1 ${Caffe_LIBRARIES} )
Теперь следующие команды из каталога проекта создадут исполняемый файл MyProject
внутри build
папка.
mkdir build
cd build
cmake ..
make
Затем вы можете запустить вашу программу с ./MyProject (arguments)
РЕДАКТИРОВАТЬ 2
Для того, чтобы это работало, очень важно выполнить требование построения caffe с помощью CMake. Вам необходимо настроить и сгенерировать Make-файлы с помощью CMake. использование cmake-gui
или же ccmake
для этой цели, чтобы вы могли установить свои параметры, такие как CPU_ONLY и т. д.
Вы должны создать каталог сборки внутри caffe и выполнить следующее для базовой настройки
mkdir build
cd build
cmake ..
make -jX #X is the number of threads your CPU can handle
Теперь каталог .cmake в вашей папке $ HOME состоит из следующих
/home/user/.cmake/packages/Caffe/<random_string>
файл. Этот файл указывает на место установки caffe (это наш каталог сборки)
Теперь команда find_package должна работать без ошибок для других ваших проектов. А поскольку вы используете CMake, вы можете хранить папку своего проекта вне папки Caffe (и лучше оставить ее снаружи, так как процесс make caffe попытается собрать ваши файлы, но это не удастся)
Заметка: Если ошибка повторяется, вы можете вручную установить Caffe_DIR во время конфигурации cmake.
Измените Makefile.config, чтобы установить CPU_ONLY := 1
# CPU-only switch (uncomment to build without GPU support).
CPU_ONLY := 1