これはautomakeに関する質問だと思います。
Cal3D のひどいデモに苦労しています。最初に遭遇した問題は、Cal3D コード ベースが見つから#include <cstring>
ず#include <memory>
、多くの場所にあることでした。
Cal3d のソース ファイルでエラーが発生するたびにこれを行うだけで、十分にコンパイルできました。
Callyデモにもいくつか必要でした#include <cstring>
今私の問題は、tick.cpp のコンパイル時に HAVE_SDL_H が定義されていないことです。configure と makefile は私のシステムに SDL がインストールされていることを受け入れているようですが、src/tick.cpp のマクロは受け入れていません。
configure.in か何かに何らかのバグがあると思いますが、それが何であるかはわかりません。
if g++ -DHAVE_CONFIG_H -I. -I. -I.. -O3 -ffast-math -funroll-all-loops -g -O2 -I/usr/include -I/usr/local/include -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -MT tick.o -MD -MP -MF ".deps/tick.Tpo" -c -o tick.o tick.cpp; \
then mv -f ".deps/tick.Tpo" ".deps/tick.Po"; else rm -f ".deps/tick.Tpo"; exit 1; fi
tick.cpp:144:5: error: #error "no timer implemented for your plateform"
編集:
私はついにデモをコンパイルしました。
cal3d をコンパイルしたときに#include <cstring>
、次のファイルに追加しました。
- src/cal3d/hardwaremodel.cpp
- src/cal3d/platform.cpp
- src/cal3d/renderer.cpp
- src/cal3d/submesh.cpp
- src/cal3d_converter.cpp
cally をコンパイルしたときに#include <cstring>
、次のファイルに追加しました。
- src/demo.cpp
- src/model.cpp
model.cppで、640 行目を次のように変更しました。
glBindTexture(GL_TEXTURE_2D, (GLuint)pCalRenderer->getMapUserData(0));
に
glBindTexture(GL_TEXTURE_2D, *(GLuint*)pCalRenderer->getMapUserData(0));
また、 src/tick.cppをコンパイルするために、さらに醜い変更を加えました。
src/tick.cpp で、SDL に関係するすべてのものを削除しました。Tick::getTime() もコンパイルできるように、__i386__ または __ia64__ をチェックする if 句のマクロも削除しました。
これが適切な修正ではないことはわかっているので、改善は大歓迎です。
- 2.6.27 カーネルの 64 ビット OpenSuSE。
- GCC: 4.3.2
- GNU オートメイク: 1.10.1
- GNU Autoconf 2.63
- SDL ライブラリの 64 ビット バージョンは、zypper を使用して (GUI 経由で) インストールされます。
解決
configure.in変更で
AC_CHECK_HEADERS([SDL.h])
に
AC_CHECK_HEADERS([SDL/SDL.h])
(その後、autoreconf と ./configure を実行します)
tick.cppで、すべてのチェックをHAVE_SDL_H
に変更しますHAVE_SDL_SDL_H
これはすべて、sdl ライブラリの再構築によるものです。