【发布时间】:2022-02-01 02:50:51
【问题描述】:
我正在尝试使用 Code::Blocks 和 MinGW 作为静态库来构建 Assimp。我已经下载了最新的可用版本 (5.0.1) 并使用 cmake-gui 为 Code::Blocks 创建了一个生成文件。我可以使用 Code::Blocks 打开该文件,但是当我尝试构建它时会失败。这是完整的日志:
-------------- Build: all in Assimp (compiler: GNU GCC Compiler)---------------
Checking if target is up-to-date: mingw32-make.exe -q -f Makefile all
Running command: C:/PROGRA~2/CODEBL~1/MinGW/bin/mingw32-make.exe -f "C:/Users/.../assimp-5.0.1/build/Makefile" VERBOSE=1 all
"C:\Users\...\cmake-3.22.1-windows-i386\bin\cmake.exe" -S"C:\Users\...\assimp-5.0.1" -B"C:\Users\...\assimp-5.0.1\build" --check-build-system CMakeFiles\Makefile.cmake 0
Re-run cmake file: Makefile older than: C:/Users/.../cmake-3.22.1-windows-i386/share/cmake-3.22/Modules/CMakeCInformation.cmake
-- Shared libraries disabled
-- Looking for DirectX...
-- DirectX_PREFIX_PATH changed.
-- Found DirectX: C:/Program Files (x86)/CodeBlocks/MinGW/lib/libd3d9.a
-- DX lib dir: C:/Program Files (x86)/CodeBlocks/MinGW/lib
-- Looking for ZLIB...
-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
-- Could not locate ZLIB
-- compiling zlib from sources
CMake Deprecation Warning at contrib/zlib/CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
CMake Warning (dev) at C:/Users/.../cmake-3.22.1-windows-i386/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:438 (message):
The package name passed to `find_package_handle_standard_args` (rt) does
not match the name of the calling package (RT). This can lead to problems
in calling code that expects `find_package` result variables (e.g.,
`_FOUND`) to follow a certain pattern.
Call Stack (most recent call first):
cmake-modules/FindRT.cmake:19 (find_package_handle_standard_args)
code/CMakeLists.txt:1013 (FIND_PACKAGE)
This warning is for project developers. Use -Wno-dev to suppress it.
INFO Hunter enabled or RT-extension not found. glTF import/export will be built without Open3DGC-compression.
-- Could NOT find rt (missing: RT_LIBRARY)
-- Enabled importer formats: AMF 3DS AC ASE ASSBIN B3D BVH COLLADA DXF CSM HMP IRRMESH IRR LWO LWS MD2 MD3 MD5 MDC MDL NFF NDO OFF OBJ OGRE OPENGEX PLY MS3D COB BLEND IFC XGL FBX Q3D Q3BSP RAW SIB SMD STL TERRAGEN 3D X X3D GLTF 3MF MMD STEP
-- Disabled importer formats:
-- Enabled exporter formats: 3DS ASSBIN ASSXML COLLADA OBJ OPENGEX PLY FBX STL X X3D GLTF 3MF ASSJSON STEP
-- Disabled exporter formats:
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/.../assimp-5.0.1/build
"C:\Users\...\cmake-3.22.1-windows-i386\bin\cmake.exe" -E cmake_progress_start "C:\Users\...\assimp-5.0.1\build\CMakeFiles" "C:\Users\...\assimp-5.0.1\build\\CMakeFiles\progress.marks"
C:/PROGRA~2/CODEBL~1/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 all
mingw32-make.exe[1]: Entering directory 'C:/Users/.../assimp-5.0.1/build'
C:/PROGRA~2/CODEBL~1/MinGW/bin/mingw32-make.exe -f contrib\zlib\CMakeFiles\zlib.dir\build.make contrib/zlib/CMakeFiles/zlib.dir/depend
mingw32-make.exe[2]: Entering directory 'C:/Users/.../assimp-5.0.1/build'
[ 1%] Generating zlib1rc.obj
cd /d C:\Users\...\ASSIMP~1.1\build\contrib\zlib && "C:\Program Files (x86)\CodeBlocks\MinGW\bin\windres.exe" -D GCC_WINDRES -I "C:/Users/.../assimp-5.0.1/contrib/zlib" -I "C:/Users/.../assimp-5.0.1/build/contrib/zlib" -o "C:/Users/.../assimp-5.0.1/build/contrib/zlib/zlib1rc.obj" -i "C:/Users/.../assimp-5.0.1/contrib/zlib/win32/zlib1.rc"
Der Befehl "C:\Program" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
C:\Program Files (x86)\CodeBlocks\MinGW\bin\windres.exe: preprocessing failed.
mingw32-make.exe[2]: *** [contrib/zlib/zlib1rc.obj] Error 1
mingw32-make.exe[1]: *** [contrib/zlib/CMakeFiles/zlib.dir/all] Error 2
mingw32-make.exe: *** [all] Error 2
contrib\zlib\CMakeFiles\zlib.dir\build.make:72: recipe for target 'contrib/zlib/zlib1rc.obj' failed
mingw32-make.exe[2]: Leaving directory 'C:/Users/.../assimp-5.0.1/build'
CMakeFiles\Makefile2:176: recipe for target 'contrib/zlib/CMakeFiles/zlib.dir/all' failed
mingw32-make.exe[1]: Leaving directory 'C:/Users/.../assimp-5.0.1/build'
C:/Users/.../assimp-5.0.1/build/Makefile:134: recipe for target 'all' failed
Process terminated with status 2 (0 minute(s), 11 second(s))
4 error(s), 0 warning(s) (0 minute(s), 11 second(s))
我不是很熟悉所有构建的东西,但看起来 zlib 有一些问题。如何解决该问题并使用我拥有的编译器构建库?
我不想切换到 msys2。
在我切换到 Assimp 5.1.6 版本之后,它变得更有价值,cmake 无法生成 makefile:
可能是这个原因:
但我不知道所有这些makefile stuf。
甚至移到了 3.0 版,但仍然无法使用 cmake。至少那个版本有办法绕过那个 anoing cmake。有一个 Visual Studio 项目,我可以像这样打开并选择 noboost 版本:
但即使选择了那个选项,也有很多关于提升的错误。但是有一些与 boost 无关的错误消息对我来说毫无意义:
C:\...\assimp--3.0.1270-source-only\code\StringComparison.h||In function 'int Assimp::ASSIMP_stricmp(const char*, const char*)':|
C:\...\assimp--3.0.1270-source-only\code\StringComparison.h|137|error: '::strcasecmp' has not been declared|
C:\...\assimp--3.0.1270-source-only\code\StringComparison.h||In function 'int Assimp::ASSIMP_strincmp(const char*, const char*, unsigned int)':|
C:\...\assimp--3.0.1270-source-only\code\StringComparison.h|186|error: '::strncasecmp' has not been declared|
strcasecmp 和 strncasecmp 都来自 string.h,但包括 string.h 并没有改变任何东西。
正如here 所见,我不是唯一一个有这个问题的人。因此,该线程中的解决方案适用于 strcasecmp 和 strncasecmp,但由于这种 anoing 提升,仍然存在很多错误。
【问题讨论】:
-
您可能只想切换到使用 msys2 来提供您的 mingw 并通过 msys2 包管理安装 Assimp。然后修改您的 Code::Blocks 设置以使用 msys2 安装的 MinGW。 https://www.msys2.org/
-
在其他一些线程中已经得到了相同的建议,这就是我明确写下我想使用我拥有的编译器的原因。抱歉,我的问题必须更清楚。
-
Der Befehl "C:\Program" ist entweder falsch geschrieben oder konnte nicht gefunden werden。 我不懂语言,但“ C:\Program" 看起来令人担忧,因为它看起来不像处理 Program 和 Files 之间路径中的空间
-
这里是翻译:命令“C:\Program”拼写错误或找不到。 C:/Program Files (x86)/CodeBlocks/MinGW/lib/libd3d9.a 好像没问题,为什么是这个?
-
看起来这里提到了非常相似的错误:stackoverflow.com/questions/57092128/…。不幸的是仍然没有修复。