“格式未知的转换类型字符'l'”警告。特别是当使用cmake生成的MinGW Makefile用于Assimp时

时间:2018-10-14 22:12:57

标签: makefile cmake g++ mingw assimp

一个星期以来,我一直没有成功尝试过,以获取可与我正在用MinGW编译的项目链接的Assimp版本。

cmake生成的构建Assimp 4.1.0的makefile似乎存在某种缺陷,因为当我尝试使用它们时,会收到一些警告,最终导致在尝试链接“ 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

在此之前,唯一的错误似乎是某些头文件中的格式错误,这些头文件在引用ai_snprintf函数时使用%llu转换类型。

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文件,生成makefile并使用该makefile进行编译时,它没有出现错误并按预期运行。

我尝试使用cmake生成Visual Studio 2017项目并在那里构建它,并且在Visual Studio中使用时可以很好地链接。如果我调用相同的函数并使用MinGW进行编译,那么它不会链接,我猜这只是一个互操作性问题,但这表明我有一切需要正确构建的aspimp。

我的想法是,某种程度上assimp的cmake模块定义了应使用哪种标准assimp进行编译,而该标准不支持%llu,但这听起来很愚蠢。我不想假设某事是一个错误,但是这些警告似乎并没有抛出,因为我忘记做某事。

我试图编辑它给我的makefile文件并添加到前面:

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

在某个地方说可以用,但没有任何改变。 我还尝试为cmake定义宏__USE_MINGW_ANSI_STDIO 1,但这也无济于事。

但是我对构建二进制文件的了解并不多(尽管我学到的东西比我最近的预期要多),所以任何建议,信息和指导都值得赞赏。

0 个答案:

没有答案