0

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 ..

次にmake 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

ライブラリの順序が正しいように見えるため、どこを探索すればよいかわかりません。ここで何が欠けていますか?

4

1 に答える 1

1

問題は、この場合は mingw32 というリンク ライブラリがないことです。これを修正する最も簡単な方法は、SDL の場所を CMake に伝えることです。これを行うには、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 を再度実行することができます。

于 2013-01-26T01:08:30.813 に答える