Ошибка процесса компиляции монокулярного общего захвата: Makefile: 83: сбой рецепта для цели 'CMakeFiles / mylib.dir / all' - PullRequest
3 голосов
/ 10 марта 2020

Я пытаюсь использовать этот репозиторий:

https://github.com/CMU-Perceptual-Computing-Lab/MonocularTotalCapture

Это пакеты, которые я установил:

ffmpeg
Python 2.7.12 (with TensorFlow 1.5.0, OpenCV, Matplotlib, packages installed with pip3)
openCV 4.2.0
cmake = 3.5.1
OpenCV 2.4.13 (compiled from source with CUDA 9.0, CUDNN 7.0)
Ceres-Solver 1.13.0 (with SuiteSparse)
OpenGL, GLUT, GLEW
libigl https://github.com/libigl/libigl
wget
OpenPose
eigen3, version 3.3.7
Boost version: 1.58.0
GNU 5.4.0

к сожалению, в конце я получаю сообщение об ошибке и не знаю, как исправить.

-- Build files have been written to: /home/ziom/Scrivania/MonocularTotalCapture/FitAdam/build

mario@ziom-Z87-HD3:/home/ziom/Scrivania/MonocularTotalCapture/FitAdam/build# make -j12

/home/ziom/Scrivania/MonocularTotalCapture/FitAdam/src/AdamFastCost.cpp: In member function ‘void AdamFullCost::SparseRegress(const Eigen::SparseMatrix<double, 0>&, const double*, const double*, const double*, const double*, double*, double*, double*, double*) const’:
/home/ziom/Scrivania/MonocularTotalCapture/FitAdam/src/AdamFastCost.cpp:1200:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int ic = 0; ic < total_vertex.size(); ic++)
^
/home/ziom/Scrivania/MonocularTotalCapture/FitAdam/src/AdamFastCost.cpp:1225:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int ic = 0; ic < total_vertex.size(); ic++)
^
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/mylib.dir/all' failed
make[1]: *** [CMakeFiles/MYLIB.dir/all] Errore 2
Makefile:83: recipe for target 'CMakeFiles/mylib.dir/all' failed
make: *** [all] Errore 2

1 Ответ

0 голосов
/ 11 марта 2020

Начал вводить ответ на этот вопрос в комментариях, но он был слишком длинным ... Так что я просто сделаю ответ.

То, что у вас есть, это явно 2 предупреждения, но вы терпите неудачу с 2 ошибки. Это то, что делает -Werror. Теперь то, что вы сделали с -Wno-error, должно работать, но оно может быть перезаписано, если за ним следует -Werror. Например, если я создаю простую программу с g cc, например, так:

gcc -Wno-error -Werror test.c

Команда -Werror перезаписала команду -Wno-error. Я только что посмотрел на файл CMakeLists.txt из этого проекта и не вижу упоминания -Werror. Так как это по умолчанию выключено, оно должно быть где-то там. Вот фрагмент из файла CMakeLists.txt из этого проекта:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpedantic -Wall -Wextra")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")

Я думаю, что -Werror может быть установлено для ${OpenMP_C_FLAGS} или ${OpenMP_CXX_Flags}. Чтобы проверить это, вы можете использовать функцию cmake message. Добавьте следующие строки после назначения CMAKE_CXX_FLAGS:

message("CFlags: ${CMAKE_C_FLAGS} CXXFlags: ${CMAKE_CXX_FLAGS}")

Моя теория состоит в том, что вы найдете где-нибудь -Werror. Если это так, просто добавьте -Wno-error в конце этих двух строк (8 и 10) в CMakeLists.txt:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS} -Wno-error")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -Wno-error")

Трейлинг -Wno-error перезапишет любое значение -Werror , Может быть более чистое решение cmake для решения этой проблемы, но я не эксперт по cmake.

...