Предупреждение "неизвестный тип преобразования 'l' в формате". В частности, при использовании MakeG-файлов MinGW, сгенерированных cmake для Assimp
В течение недели я безуспешно пытался получить сборку Assimp, которую можно связать с проектом, который я компилирую с MinGW.
Кажется, что make-файлы, которые генерирует cmake для сборки Assimp 4.1.0, каким-то образом ошибочны, потому что, когда я пытаюсь использовать их, я получаю некоторые предупреждения, которые в конечном итоге приводят к ошибке при попытке связать "libassimp.dll"
CMakeFiles\assimp.dir/objects.a(Exporter.cpp.obj):Exporter.cpp:(.text+0x1571): undefined reference to `Assimp::ExportScene3MF(char const*, Assimp::IOSystem*, aiScene const*, Assimp::ExportProperties const*)'
collect2.exe: error: ld returned 1 exit status
code\CMakeFiles\assimp.dir\build.make:3159: recipe for target 'code/libassimp.dll' failed
mingw32-make[2]: *** [code/libassimp.dll] Error 1
CMakeFiles\Makefile2:289: recipe for target 'code/CMakeFiles/assimp.dir/all' failed
mingw32-make[1]: *** [code/CMakeFiles/assimp.dir/all] Error 2
Makefile:131: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
Прежде чем он доходит до этого, кажется, что единственная ошибка - это ошибка формата в некоторых заголовочных файлах, которые используют тип преобразования%llu при обращении к функции ai_snprintf.
warning: unknown conversion type character 'l' in format [-Wformat=]
warning: too many arguments for format [-Wformat-extra-args]
Я использую последнюю версию MinGW с версией g ++ 6.3.0, по умолчанию используется стандарт C++14. Я провел тест, чтобы убедиться, что этот стандарт для Windows не поддерживает%llu, но когда я написал файл CMakeLists.txt, сгенерировал make-файл и скомпилировал его с помощью make-файла, он не выдал ошибок и работал как ожидалось.
Я попытался с помощью cmake создать проект Visual Studio 2017 и создать его там, и он прекрасно работает при использовании в Visual Studio. Если я вызываю те же функции и компилирую с MinGW, он не связывается, я полагаю, что это просто проблема совместимости, но она предполагает, что у меня есть все, что необходимо для правильной сборки.
Я думаю, что модули assimp cmake каким-то образом определяют, с каким стандартом assimp следует компилироваться, и этот стандарт не поддерживает%llu, но это звучит глупо. Я не люблю предполагать, что что-то является ошибкой, но эти предупреждения не выглядят так, как будто их выбросили, потому что я забыл что-то сделать.
Я попытался отредактировать make-файл, который он мне дал, и добавить на передний план:
CXX = g++
CXXFLAGS = -Wall -std=c++11 $(DEBUG)
Потому что где-то было сказано, что это может сработать, но это ничего не изменило. Я также попытался определить макрос __USE_MINGW_ANSI_STDIO 1 для cmake, но он тоже ничего не сделал.
Но я действительно мало знаю о сборке двоичных файлов (хотя я узнал больше, чем ожидал в последнее время), поэтому любые советы, информация и рекомендации приветствуются.