Файл CMakeLists.txt в папке .\vcpkg\buildtrees\pcl\src\pcl-1.13.1-38090574eb.clean по умолчанию определяет PCL_ONLY_CORE_POINT_TYPES как для MSVC, так и для MINGW. Но мне нужно построить PCL для всех типов точек.
Если я отредактирую файл CMakeLists.txt, чтобы удалить объявление...
add_definitions("-DBOOST_ALL_NO_LIB -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -DNOMINMAX ${SSE_DEFINITIONS}")
#add_definitions("-DBOOST_ALL_NO_LIB -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -DNOMINMAX -DPCL_ONLY_CORE_POINT_TYPES ${SSE_DEFINITIONS}")
...и запустите VCPKG, используя опцию --editable...
.\vcpkg install pcl[vtk]:x64-windows --featurepackages --recurse --editable pcl
...Я получаю следующую ошибку сборки...
-- Configuring x64-windows
-- Building x64-windows-dbg
CMake Error at scripts/cmake/vcpkg_execute_build_process.cmake:134 (message):
Command failed: C:/dev/vcpkg/downloads/tools/cmake-3.27.1-windows/cmake-3.27.1-windows-i386/bin/cmake.exe --build . --config Debug --target install -- -v -j17
Working Directory: C:/dev/vcpkg/buildtrees/pcl/x64-windows-dbg
See logs for more information:
C:\dev\vcpkg\buildtrees\pcl\install-x64-windows-dbg-out.log
Call Stack (most recent call first):
installed/x64-windows/share/vcpkg-cmake/vcpkg_cmake_build.cmake:74 (vcpkg_execute_build_process)
installed/x64-windows/share/vcpkg-cmake/vcpkg_cmake_install.cmake:16 (vcpkg_cmake_build)
ports/pcl/portfile.cmake:74 (vcpkg_cmake_install)
scripts/ports.cmake:168 (include)
Как мне обойти эту проблему?
Вы не упомянули install-x64-windows-dbg-out.log
в сообщении об ошибке, поэтому я не могу сказать наверняка, но возможно, компоновщику MSVC нужно обработать слишком много символов. Связано: https://github.com/PointCloudLibrary/pcl/issues/5928
Зачем нужно строить PCL для всех типов точек? Т.е. какой тип точки вам нужен, которого нет в библиотеке в противном случае? Использование #define PCL_NO_PRECOMPILE
может быть для вас решением.
Спасибо @IBitMyBytes, определение PCL_NO_PRECOMPILE помогло. Это следует выделить жирным шрифтом на странице PLC на github или Компиляция PCL из исходного кода в Windows с примечанием о том, что его следует использовать, если требуются другие, нестандартные типы точек!
Чтобы ответить на ваш вопрос о том, почему мне нужно было построить PCL для всех типов точек... Я пытался построить пример Сегментация на основе разницы нормалей, чтобы попытаться идентифицировать линейные объекты, то есть линии электропередачи, которые исключаются большинством средств шумоподавления. алгоритмы.
Поясним: новые многоимпульсные сканеры отлично подходят для увеличения плотности точек в ущерб четкости, поскольку они вносят много шума; примерно 1/3 данных — это шум. К сожалению, фирменное программное обеспечение, используемое для удаления этого шума, также удаляет линии электропередачи, которые имеют очень низкую интенсивность и очень мало ударов. Он также удаляет много растительности, но это еще одна проблема, которую нужно решить. :-)
На изображении ниже показан масштаб шума, на котором четко видны линии электропередачи. ЛЭП среди сильного шума
Спасибо за объяснение. Похоже, интересное приложение :)