Подробное руководство по компиляции проекта GitHub с открытым исходным кодом caffe-android-lib под Linux
каталог
I. Фон
Чтобы разработать программное обеспечение для распознавания лиц на платформе Android, вам нужно использовать платформу Android Caffe для запуска модели. Вам нужно создавать файлы .so на разных платформах (armeabi, armeabi-v7a, arm64-v8a, x86, x86_64). Великий Бог исходный код проектаhttps://github.com/sh1r0/caffe-android-lib
Во-вторых, подготовить к работе
2.1 Экологическая подготовка
В соответствии с требованиями мы устанавливаем Android NDK r11c в среде Ubuntu 16.04, см.Этот блог, Установите cmake 3.5.2, обратитесь кЭтот блог。
2.2 Скачать проект
Создайте каталог локально (я нахожусь в каталоге / home) и запустите его (установите его самостоятельно без Git)
git clone —recursive https://github.com/sh1r0/caffe-android-lib.git
2.3 Изменить имя метода функции файла C ++
Можно сказать, что этот шаг очень важен, потому что пакет .so, который вы хотите сгенерировать, должен быть помещен в ваш собственный проект, и поскольку имя метода в C ++, соответствующее имени собственного метода JAVA, его формат фиксирован, нам нужно Ситуация изменилась ~
5 причин научиться собирать софт из исходников
Сначала перейдите в каталог, где хранятся файлы C ++
cd caffe-android-lib/caffe/android/
В это время вы можете увидеть четыре файла
CMakeLists.txt | |
caffe_jni.cpp | Файлы для изменения |
caffe_mobile.cpp | Определяет класс Caffe и связанные методы |
caffe_mobile.hpp | Определяет класс Caffe и связанные методы |
Нам нужно только отредактировать файл caffe_jni.cpp с помощью vim. Мы можем увидеть несколько методов, таких как на следующем рисунке. Это метод JNI, и его имя также является регулярным
JNIEXPORT void JNICALL Java_com_sh1r0_caffe_1android_1lib_CaffeMobile_setNumThreads
Имя пакета, соответствующее com_sh1r0_caffe_1android_1lib: com.sh1r0.caffe.android_lib
CaffeMobile соответствует имени класса нативного метода.Наконец setNumThreads совпадает с именем нативного метода в JAVA.
Подводя итог, это предложение соответствует такому классу
package com.sh1r0.caffe.android_lib; /** * Created by shiro on 3/26/15. */ public class CaffeMobile < public native void setNumThreads(int numThreads); //todo >
Поэтому, пожалуйста, подтвердите ваше имя класса JAVA и имя пакета. Например, мой собственный класс для компиляции
package ch.zhaw.facerecognitionlibrary.Helpers; public class CaffeMobile
Тогда я буду конвертировать строки в файле C ++
Чтобы облегчить замену, вы можете выполнить следующую команду в vim для равномерной замены
%s/Java_com_sh1r0_caffe_1android_1lib_CaffeMobile/Java_ch_zhaw_facerecognitionlibrary_Helpers_CaffeMobile/g
Сохранить и выйти
2.4 Установка переменных среды
Взять хотя бы x86
Изучение GitHub в одном видео уроке за 15 минут!
export ANDROID_ABI = x86 # опциональное armeabi, armeabi-v7a, arm64-v8a, x86, x86_64 export NDK_ROOT = / path / to / ndk # Если вы обращаетесь к моему блогу для установки, каталогом является / opt / ndk / android-ndk-r11c
В-третьих, скомпилируйте проект
3.1 выполнить скрипт компиляции
cd caffe-android-lib ./build.sh
Если. , , Вы не столкнулись с какими-либо проблемами и увидели Готово! Тогда поздравляю, вы выиграли приз ~~ Пожалуйста, пропустите следующие шаги и перейдите к шагу 4
Если вы сожалеете, компиляция завершается с ошибкой, как показано ниже
Итак, поздравляю, вы встретили меня ~
Далее, пожалуйста, внимательно следите за мной
3.2 Копировать отсутствующие файлы
На самом деле есть некоторые файлы с ошибками на картинке выше. Они были созданы. Почему я не могу их найти? Похоже, что сценарий, написанный автором, возможно, забыл переместить сгенерированный файл по указанному пути, не говоря уже о том, чтобы сделать это самостоятельно, получить много еды ~
(1) Сначала убедитесь, что ваш путь находится под caffe-android-lib /
[email protected]:/home/caffe-android-lib#
(2) Войдите в каталог OpenBLAS
cd OpenBLAS/
В это время вы выполняете команду вида ll
Вы найдете имя файла, очень похожее на то, что мы ищем — libopenblas_atomp-r0.2.18.a, есть дополнительный p, но это не имеет значения, вы можете использовать его напрямую ~
(3) Скопировать в соответствующий каталог
Теперь выполните команду
cp libopenblas.a /home/caffe-android-lib/android_lib/openblas/lib/ cp libopenblas_atomp-r0.2.18.a /home/caffe-android-lib/android_lib/openblas/lib/
Вы нашли это тщательно, я скопировал оба файла в каталог caffe-android-lib / android_lib / openblas / lib /
Нам также нужно скопировать несколько файлов
Выполните следующую команду, чтобы скопировать файлы в каталоге lapack-netlib / LAPACKE / include по указанному пути
cp -r lapack-netlib/LAPACKE/include/. /home/caffe-android-lib/android_lib/openblas/include/
Можно посмотреть, какие файлы копируются
Взаимосвязь файлов после копирования, зеленое поле — это недавно скопированный файл
3.3 Изменить скрипт компиляции
Поскольку Openblas был скомпилирован, нам нужно закомментировать соответствующий контент в скрипте build.sh
Выполните cd: отступление к каталогу caffe-android-lib /
vim измените скрипт, закомментируйте несколько строк, как показано, сохраните и выйдите
3.4 Скомпилируйте скрипт снова
Выполните ./build.sh и дождитесь завершения компиляции
Этот сборник, вероятно, занял более 10 минут. , , Подожди медленно
В-четвертых, сборка завершена
Скомпилированный файл .so находится в каталоге caffe-android-lib / android_lib / caffe / lib /, как показано ниже
На данный момент вы сделали ~ как вынуть это? Подумайте сами, во всяком случае, я использую Ubuntu на облачном хосте XX и скачал его напрямую с помощью инструмента xshell xftp ~
Интеллектуальная рекомендация
Clion Configuration Pcl
Обзор Clion Configuration Pcl Конфигурация Вы можете увидеть, как установить PCL на Mac Установка Mac Pcl в основном конфигурация Cmakelist.
Обработка изображений PyOpenCL: два изображения без наложения веса плюс
Программисты, вы все еще можете купить дом в Пекине? >>> Результаты выполнения программы.
PHP Development Компьютерный сайт Alipay Оплата Подробный процесс (Тест Песочницы)
Сначала прикрепите заметки, которые я начал, когда я начал делать тест на песочницу. (1) Подготовка 1. Бизнес-счет (личный счет не работает) 2, Окружающая среда разработки выше PHP5.5 (2) конкретные п.
Понимание Прокси
Источник статьи: DIY племя (http://www.diybl.com/course/3_program/java/javajs/20090205/154868.html) Прокси шаблон Прокси-шаблон является широко используемы.
Проектирование и реализация модуля связи RS232/CAN/USB в VS+QT
В проекте проточного цитометра, технологии связи, такие как RS232/CAN/USB, использовались для достижения передачи информации. Чтобы позволить повторному использованию этих модулей связи, они намерены .
Источник: russianblogs.com
Toliak / Guide.md
Чтобы установить значение опции, отличное от «по умолчанию», необходимо дописать -DНАЗВАНИЕ_ОПЦИИ=Значение к команде конфигурирования. Команда после этого может выглядеть, например, так:
cmake -H. -B.build -DBUILD_DEMO=On
Чтобы сделать такое действие в CLion, необходимо перейти в: Settings -> CMake -> CMake options.
Если используется Hunter (пакетный менеджер), то прописываются его настройки
include(«tools/gate/cmake/HunterGate.cmake») # Подключение CMake скрипта с дополнительными функциями HunterGate( URL «https://github.com/ruslo/hunter/archive/v0.23.214.tar.gz» # URL к ядру Hunter SHA1 «e14bc153a7f16d6a5eeec845fb0283c8fad8c358» # SHA1 хэш )
На этапе конфигурирования, CMake ожидает файл tools/gate/cmake/HunterGate.cmake .
Если этот файл не существует, возможны 2 варианта:
- Необходимо добавить гит подмодуль:
git submodule add https://github.com/hunter-packages/gate.git tools/gate
- Либо (если используется шаблонный репозиторий) необходимо обновить подмодули:
git submodule update —init —recursive
URL и SHA1 ядра Hunter можно получить в релизах: https://github.com/hunter-packages/gate.git
project(MyAwesomeProject)
Дополнительные опции для компилятора (могут отсутствовать)
string(APPEND CMAKE_CXX_FLAGS » -Wall -Werror») # Флаги для включения всех предупреждений и дропа компиляции при их наличии
Подключение зависимых библиотек
Затем осуществляется подключение библиотек, в которых нуждается проект (Boost, GTest, Threads и т.д.)
Указания для Hunter о необходимо коллекционирования указанных пакетов
hunter_add_package(GTest) # Указание Hunter о добавлении пакета GTest hunter_add_package(Boost COMPONENTS filesystem regex) # Указание Hunter о добавлении пакета Boost с указанными компонентами
Указания о том, какие пакеты будут использованы (ожидается их наличие)
find_package(GTest CONFIG REQUIRED) find_package(Boost CONFIG REQUIRED filesystem regex) find_package(Threads REQUIRED)
CONFIG — ключевое слово, показывающее маску названий конфигурационных файлов.
REQUIRED — обязательность подключения пакета (иначе — ошибка).
Добавление целей сборки
После настройки окружающией среды пишется информация о том, что ожидается получить в результате сборки
add_executable( my_very_interesting_target # Название цели $ /path_to_cpp_file $ /path_to_another_cpp_file )
add_library( my_very_interesting_target_library # Название цели STATIC # Тип библиотеки (SHARED или STATIC) $ /path_to_cpp_file $ /path_to_another_cpp_file )
Указание директорий с заголовочными файлами
target_include_directories( target_name # Цель, при сборке которой учитываются указанные пути к заголовочным файлам PUBLIC # область видимости (PRIVATE, INTERFACE или PUBLIC) $ /include )
Указание библиотек для линковки
target_link_libraries( target_name # Цель, к которой просходит линковка library_name # Библиотеки, которые линкуются к цели )
Названия библиотек из Hunter, как правило, имеют вид LibraryName::ComponentName .
Данные о библиотеках из пакета, добавленного через find_package хранятся в переменных. Например, для Threads: $
Для сборки тестирования необходимо наличие:
- Добавления пакета googletest (GTest в Hunter)
- Цели для сборки исполняемого файла
- Линковки gtest_main и gtest (GTest::main и GTest::gtest в Hunter) к цели
- Включенного тестирования в конфигурационном файле
enable_testing() # Включение тестирования add_test(NAME unit_tests COMMAND tests) # При тестировании выполнится исполняемый файл tests
Можно добавлять несколько тестовых целей под разными названиями. И даже с использованием разных фреймворков.
Для сборки и выполнения тестирования необходимо выполнить следующую команду (ожидается предварительное конфигурирование):
cmake —build .build —target test
Пример тела конфигурационного файла с тестированием:
# 1 hunter_add_package(GTest) find_package(GTest CONFIG REQUIRED) find_package(Threads) # 2 add_executable( tests $ /tests/test.cpp ) # 3 target_link_libraries( tests $ GTest::gtest GTest::main ) # 4 enable_testing() add_test(NAME unit_tests COMMAND tests)
Для удобства в CLion необходимо добавить конфигурацию сборки google test.
Начало конфигурации. Как правило, его трогать не надо.
if (BUILD_COVERAGE) # Если активна опция сборки с покрытием set(ENABLE_COVERAGE ON CACHE BOOL «Enable coverage build.» FORCE) # Установка значения переменной ENABLE_COVERAGE list(APPEND CMAKE_MODULE_PATH «$ /cmake») # Дополнение возможных местоположений конфигурационных cmake файлов find_package(codecov) # Нахождение пакета (ожидается существование файла cmake/FindCodecov.cmake)
Далее прописываются цели, которые будут проанализированы на процент покрытия.
add_coverage(my_awesome_and_very_interesting_target) add_coverage(tests)
Конец конфигурации. Как правило, не надо трогать.
list(APPEND LCOV_REMOVE_PATTERNS «‘$ /tests/*'») # Удаление файлов с тестами из анализа coverage_evaluate() # Вызов анализатора endif ()
Для начала необходимо настроить окружение. Как правило, это не надо трогать
os: linux # ОС sudo: required # Необходимость прав sudo language: «minimal» # Языковой шаблон services: — docker # Необходимые сервисы env: # Based on Ubuntu 18.04 # GCC 7.3 # clang 7 # CMake 3.10 # gcovr # jscpd # cpplint — DOCKER_IMAGE=»rusdevops/bootstrap:cpp» # Используется по умолчанию # Based on Alpine 3.10 # GCC 8.3 # CMake 3.14 # gcovr # jscpd # valgrind # Hunter GTest v1.8.0 (cached) # Hunter Boost cached components: exception # filesystem # log # regex # system # — DOCKER_IMAGE=»toliak/bootstrap-cpp» # Для использования снять комментарий before_script: — docker pull $DOCKER_IMAGE # Предварительное скачивание образа
Далее необходимо указать jobs’ы, которые будет выполнять Travis. Jobs содержит название и команды.
jobs: include: — name: «tests» # Название script: # Команды для исполнения — docker run -t -v $(pwd):/var/builder/ -w /var/builder —entrypoint ./scripts/tests.sh $DOCKER_IMAGE — name: «quality» script: — docker run -t -v $(pwd):/var/builder/ -w /var/builder —entrypoint ./scripts/duplication.sh $DOCKER_IMAGE # И так далее
К таким относятся, например, правила для веток и для уведомлений. Например:
notifications: email: false
Источник: gist.github.com
Как скомпилировать проект?
Есть ссылка на гитхаб проект: https://github.com/SafeExamBrowser/seb-win-refacto.
Как его(проект) можно скомпилировать? Хочу изменить некоторые данные, после чего требуется весь проект скомпилировать в один .exe файл
Заранее спасибо
- Вопрос задан более двух лет назад
- 200 просмотров
Решения вопроса 1
Software Developer
Установите компилятор, например, GCC, скачайте архив с GitHub, измените то, что вам надо, затем скомпилируйте через командную строку, например так: g++ myprog.cpp , если есть заголовочные файлы, то добавите флаг -o. Подробнее обо всем этом здесь. Либо можете установить Visual Studio, изменить там и скомпилировать, вот пошаговая инструкция.
Ответ написан более двух лет назад
Нравится 1 2 комментария
Источник: qna.habr.com