Невозможно собрать библиотеку Nokia HEIF с помощью make - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь собрать библиотеку HEIF в https://github.com/nokiatech/heif, но мне не везет.

У меня установлен CMake и установлена ​​последняя версия MinGW. Я следую инструкциям по созданию библиотеки, но получаю сообщение об ошибке.

Первый шаг:

cd heif/build
cmake --help
cmake ../srcs -G"<Generator listed by above command for your target platform>"

работает, но второй шаг - это:

cmake --build .

, кажется, работает, но когда он достигает 41%, я получаю эту ошибку:

C:\Users\dantelo\Documents\heif-master\srcs\reader\heifstreamfile.cpp: In constructor 'HEIF::FileStream::FileStream(const char*)':
C:\Users\dantelo\Documents\heif-master\srcs\reader\heifstreamfile.cpp:44:9: error: 'fopen_s' was not declared in this scope
     fopen_s(&m_file, filename, "rb");
     ^~~~~~~
C:\Users\dantelo\Documents\heif-master\srcs\reader\heifstreamfile.cpp:44:9: note: suggested alternative: 'fopen'
     fopen_s(&m_file, filename, "rb");
     ^~~~~~~
     fopen
reader\CMakeFiles\heif_static.dir\build.make:93: recipe for target 'reader/CMakeFiles/heif_static.dir/heifstreamfile.cpp.obj' failed
mingw32-make.exe[2]: *** [reader/CMakeFiles/heif_static.dir/heifstreamfile.cpp.obj] Error 1
mingw32-make.exe[2]: Leaving directory 'C:/Users/dantelo/Documents/heif-master/build'
CMakeFiles\Makefile2:233: recipe for target 'reader/CMakeFiles/heif_static.dir/all' failed
mingw32-make.exe[1]: *** [reader/CMakeFiles/heif_static.dir/all] Error 2
mingw32-make.exe[1]: Leaving directory 'C:/Users/dantelo/Documents/heif-master/build'
Makefile:85: recipe for target 'all' failed
mingw32-make.exe: *** [all] Error 2

Я на Windows 10, если это актуально. Я понятия не имею, почему это происходит. Любая помощь приветствуется

1 Ответ

2 голосов
/ 21 января 2020

Кажется, что fopen_s присутствует только в библиотеке C, предоставленной Microsoft, то есть в MSV C. Источник: Есть ли способ использовать fopen_s () с G CC или хотя бы создать #define об этом?

Тогда вам лучше всего перейти на MSV C, потому что ваш код, по-видимому, никогда не тестировался с MinGW, так как он не может быть скомпилирован последним.

В качестве альтернативы, если вам повезет, вы можете просто использовать некоторые #define трюки для преобразования fopen_s в стандарт fopen (см. ответы в связанном вопросе) и надеюсь, что это единственная несовместимость в коде.

...