【发布时间】:2010-01-03 14:56:19
【问题描述】:
我认为这是一个关于 automake 的问题。
我正在为 Cal3D 的 cally 演示而苦苦挣扎。
我遇到的第一个问题是缺少 Cal3D 代码库#include <cstring> and #include <memory> in a lot of places。
每次我在 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 相关的内容。我还删除了一个宏 if 子句检查 __i386__ 或 __ia64__,以便 Tick::getTime() 也可以编译。
我知道这不是一个适当的修复,因此非常欢迎改进。
- 带有 2.6.27 内核的 64 位 OpenSuSE。
- GCC:4.3.2
- GNU Automake:1.10.1
- GNU Autoconf 2.63
- 64 位版本的 SDL 库随 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 库中的重组。
【问题讨论】:
-
请添加有关您系统的更多信息