предупреждение "неизвестный тип преобразования 'l' в формате".В частности, при использовании MakeG-файлов MinGW, сгенерированных cmake для Assimp - PullRequest
0 голосов
/ 15 октября 2018

В течение недели я безуспешно пытался получить сборку 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, он не связывается, я полагаю, что это просто проблема совместимости, но она предполагает, что у меня есть все, что нужно, чтобы правильно создать ассимп.

Мои мысли, так или иначе, ассимилируютМодули cmake определяют, с каким стандартом assimp следует компилироваться, и этот стандарт не поддерживает% llu, но это звучит глупо.Я не люблю предполагать, что что-то является ошибкой, но эти предупреждения не выглядят так, как будто они были выданы, потому что я забыл что-то сделать.

Я попытался отредактировать make-файл, который он мне дал, и добавить вfront:

CXX = g++
CXXFLAGS = -Wall -std=c++11 $(DEBUG)

Потому что где-то там говорилось, что может работать, но это ничего не меняет.Я также попытался определить макрос __USE_MINGW_ANSI_STDIO 1 для cmake, но он тоже ничего не сделал.

Но я действительно мало знаю о сборке двоичных файлов (хотя я узнал больше, чем ожидал в последнее время),поэтому любые советы, информация, рекомендации приветствуются.

...