Библиотека облаков точек не работает в Visual Studio 2019

Я установил библиотеку pointcloud с помощью vcpkg. Я использовал командную строку vcpkg install pcl: x64-windows, и все остальные библиотеки были установлены вместе с PCL. После этого я использовал. \ Vcpkg \ vcpkg integration install, чтобы все библиотеки работали непосредственно в моем проекте Visual Studio 2019. Фактически, мой проект (содержащий образец демонстрационного кода на https://pcl.readthedocs.io/projects/tutorials/en/latest/writing_pcd.html#writing-pcd) после того, как команда правильно включила два файла заголовков и не показывала никаких проблем. Однако после запуска кода у меня появилось несколько ошибок, связанных с библиотекой boost, таких как:

Error   C2116   'boost::interprocess::winapi::GetFileSizeEx': function parameter lists do not match between declarations    RegistrationAlgorithm   C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\fileapi.h    

Error   C2733   'CreateSemaphoreA': you cannot overload a function with 'C' linkage RegistrationAlgorithm   C:\vcpkg\vcpkg\installed\x64-windows\include\boost\interprocess\detail\win32_api.hpp

Error   C4996   '_open': This function or variable may be unsafe. Consider using _sopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    RegistrationAlgorithm   C:\vcpkg\vcpkg\installed\x64-windows\include\pcl\io\low_level_io.h          

Тот же самый вопрос (тот же пример кода, те же ошибки) был задан здесь: библиотека облака точек не работает в VS 2019, но работает в VS 2017

Однако ему удалось заставить его работать, переключившись на инструменты сборки Visual Studio 2017 (v141) из инструментов сборки VS2019 (v142). Я загрузил v141 и переключился, но все равно получаю те же ошибки.

Любой совет?

Я попытался запустить код через CMake, но в этом процессе я столкнулся с гораздо большим количеством ошибок.


person Marco Beccarini    schedule 05.08.2020    source источник
comment
Есть какой-нибудь совет? Вы можете опубликовать отчет об ошибке на странице vcpkg github.   -  person drescherjm    schedule 05.08.2020


Ответы (2)


Это проблема совместимости между Boost Interprocess и MSVC 2019. Согласно Microsoft, вы можете использовать еще не задокументированный параметр совместимости в MSVC 2019 для предотвращения ошибок C2116 и C2733, связанных с повторным объявлением внешних функций C. Этот вариант /Zc:externC-

Остается пара C4996 ошибок, связанных с использованием небезопасных функций CRT. Согласно сообщению об ошибке, их можно подавить, написав #define _CRT_SECURE_NO_WARNINGS перед включением файлов заголовков.

С обоими из них пример кода здесь отлично строится.


Изменить: чтобы добавить эту опцию, следуйте этому меню / маршруту диалога -

  • Проект / Свойства / C / C ++ / Командная строка, затем введите этот параметр в текстовое поле Дополнительные параметры внизу.
person Ian Cook    schedule 05.08.2020
comment
Спасибо за быстрый ответ. Мне удалось удалить ошибку C4996 благодаря вам, но, будучи новичком в Visual Studio, я не знаю, как активировать этот переключатель. Не могли бы вы подробнее рассказать? - person Marco Beccarini; 05.08.2020
comment
Большое спасибо. После двух дней борьбы решение кажется близким. Я только что заметил еще одну ошибку, которая осталась единственной, а именно: Error C3861 'pop_t': identifier not found RegistrationAlgorithm C:\vcpkg\vcpkg\installed\x64-windows\include\flann\algorithms\dist.h Если вы знаете, как исправить и это, это было бы здорово. Благодарность! - person Marco Beccarini; 05.08.2020
comment
Извините, я не получаю здесь эту ошибку. Кажется, я связан с пакетом flann, который не увеличивает межпроцессный процесс, поэтому это другая проблема. Может задать новый вопрос? - person Ian Cook; 05.08.2020
comment
Надеюсь, обходной путь / Zc: externC- не понадобится в будущих версиях Boost (скоро будет выпущен Boost 1.74). Соответствующий отчет об ошибке Boost.Interprocess - Проблема 99. - person igaztanaga; 11.08.2020

Решения для C3861:

Вы можете переместить typedef unsigned long long pop_t; вне #if и #else, так что любой из них будет использовать параметр для вычисления. Если FLANN установлен в Program Files или Program Files (x86), вам необходимо запустить Visual Studio от имени администратора. Программные файлы и программные файлы (x86) защищены и требуют повышенных разрешений для редактирования любого содержимого каталогов. введите описание изображения здесь

Кроме того, вы можете обратиться к этой ссылке для получения дополнительной информации.

person Barrnet Chou    schedule 06.08.2020
comment
Спасибо. Теперь работает. В моем случае пришлось переместить строку за пределы #if и #else. - person Marco Beccarini; 06.08.2020
comment
Я рад, что у вас есть свое решение, и спасибо, что поделились, я был бы признателен, если бы вы отметили его как ответ, и это будет полезно для другого сообщества. - person Barrnet Chou; 06.08.2020
comment
К сожалению, у меня недостаточно репутации, чтобы отметить оба ответа как ответы. - person Marco Beccarini; 06.08.2020
comment
Я был бы признателен, если бы вы могли выбрать подходящий ответ для оценки, потому что это может помочь другим. - person Barrnet Chou; 07.08.2020
comment
Я понимаю, что я имел в виду, что я не могу отметить ни один из двух, потому что это говорит мне, что у меня недостаточно очков репутации, чтобы отметить ответ. Другие люди тоже должны будут проголосовать, и после порога он будет отмечен, иначе я бы это сделал точно. - person Marco Beccarini; 07.08.2020