mingw下搭建RecastNavigation

Posted

技术标签:

【中文标题】mingw下搭建RecastNavigation【英文标题】:Building RecastNavigation under mingw 【发布时间】:2013-01-23 05:29:20 【问题描述】:

我正在尝试通过 MinGW 构建 RecastNavigation,除了 RecastDemo 应用程序之外,一切似乎都构建得很好。

我已经完成了:

cmake -G"MSYS Makefiles" -DSDL_INCLUDE_DIR:PATH=/c/_libdist/x86/msys/include/SDL \
-DSDL_LIBRARY:PATH=/c/_libdist/x86/msys/lib/libSDL.a \
-DSDLMAIN_LIBRARY:PATH=/c/_libdist/x86/msys/lib/libSDLMain.a ..

然后 ma​​ke VERBOSE=1 在最后给我这个(删掉一堆未定义):

cd /C/_lib/blackberry/RecastNavigation/build.msys/RecastDemo && /C/app/MinGW/bin/g++.exe  -O3 -DNDEBUG    -mwindows -Wl,
--whole-archive CMakeFiles/RecastDemo.dir/objects.a -Wl,--no-whole-archive  -o ../../RecastDemo/Bin/RecastDemo.exe -Wl,-
-out-implib,../../RecastDemo/Bin/libRecastDemo.dll.a -Wl,--major-image-version,0,--minor-image-version,0  ../DebugUtils/
libDebugUtils.a ../Detour/libDetour.a ../DetourCrowd/libDetourCrowd.a ../DetourTileCache/libDetourTileCache.a ../Recast/
libRecast.a /c/_libdist/x86/msys/lib/libSDL.a /c/_libdist/x86/msys/lib/libSDLMain.a -lglu32 -lopengl32 -lkernel32 -luser
32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
Creating library file: ../../RecastDemo/Bin/libRecastDemo.dll.a
c:/_libdist/x86/msys/lib/libSDL.a(SDL_systimer.o): In function `SDL_StartTicks':
c:\_lib\SDL\1.2.15/./src/timer/win32/SDL_systimer.c:67: undefined reference to `timeBeginPeriod@4'
c:\_lib\SDL\1.2.15/./src/timer/win32/SDL_systimer.c:68: undefined reference to `timeGetTime@0'
c:/_libdist/x86/msys/lib/libSDL.a(SDL_systimer.o): In function `SDL_GetTicks':
...
...
...
c:/app/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libmingw32.a(main.o): In function `main':
C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to `WinMain@16'
collect2: ld returned 1 exit status
make[2]: *** [../RecastDemo/Bin/RecastDemo.exe] Error 1

我不确定在哪里可以进行更多探索,因为图书馆的顺序似乎是正确的。我在这里错过了什么?

【问题讨论】:

【参考方案1】:

问题是您缺少链接库,在这种情况下为 mingw32。修复它的最简单方法是告诉 CMake 在哪里可以找到 SDL。您可以通过设置 SDLDIR 环境变量来执行此操作(请参阅http://cmake.org/cmake/help/v2.8.10/cmake.html#module:FindSDL)。因此,根据您的 SDL 安装位置,从您的 MinGW 提示符:

export SDLDIR=/c/_libdist/x86/msys

然后运行 ​​CMake:

cmake -G "MSYS Makefiles" ..

这应该会找到 SDL 并正确设置 SDL 包含目录和链接库。

但是,CMake 中存在一个错误,它以错误的顺序将库传递给链接器,请参阅http://public.kitware.com/Bug/view.php?id=13769。该错误已修复,但尚未在最新版本 (2.8.10.2) 中。

在有新的 CMake 版本之前,您可以编辑缓存的 构建目录中 CMakeCache.txt 中的 SDL_LIBRARY 值并切换 SDL 库的顺序,然后再次运行 CMake。

【讨论】:

以上是关于mingw下搭建RecastNavigation的主要内容,如果未能解决你的问题,请参考以下文章

搭建vs code开发c 环境

Windows10下Opencv4+CMake+MinGW64+VSC安装教程

mingw64环境搭建

Windows搭建MSYS2和MINGW64环境

Dev-Cpp/Code::Block/MinGW下使用EasyX

Windows/Mac平台下Visual Studio Code C++开发环境搭建