第一个问题:有人可以解释一下,为什么我无法在我的Mac上找到gl.h文件?如果这个问题可以简单地回答,也许你甚至不需要阅读其余的内容,但我在网上找不到任何答案(经过数小时的研究),除了着名的“它已集成到操作系统中”或类似的东西。
我的问题详情:
我遇到使用OpenGL编译.c文件的问题。我已经浏览了几个小时没有找到任何解决方案。这是问题所在:
对于那些了解这个软件的人,我正在使用Webots(机器人模拟软件),我想实现一个物理插件。我从已经存在的(和正在运行的)插件中复制了代码,只是为了尝试一下。我正在编译使用gcc的webots(我不得不安装gcc编译器,因为它不再带有Xcode)。
现在,问题是.c文件包含一个“physics.h”标题,其中包含OpenGL / gl.h文件,然后我得到错误:“OpenGL / gl.h。没有这样的文件或directoy”
现在我尝试了很多东西:
搜索gl.h:它似乎不存在(我无法手动或使用取景器搜索功能找到它)
用GLUT / glut.h替换include OpenGL / gl.h:我得到错误“gl.h和glu.h没有这样的fil或目录”,因为它们包含在glut.h中
链接makefile和框架中的gl库
可能是所有这些组合,使用绝对或相对路径!
由于OpenGL和GLUT应该在本机上安装OS(我正在使用Lion 10.7.5),我想每个需要的文件都应该在那里。对于这个原因,我无法找到一种方法来下载这个假设丢失的文件......
此外,我的一位同事尝试并在linux上成功编译了它! Linux是一个很棒的平台,但我仍然喜欢我的mac,所以请让我希望有另一种解决方案,而不是改变Linux!
我认为我的问题出在Makefile或physic.h文件中,所以这里是:
Physic.h
:
#ifndef PHYSICS_H
#define PHYSICS_H
#include <ode/ode.h>
#ifdef WIN32
#include <windows.h>
#endif
#ifndef MACOS
#include <GL/gl.h>
#else
#include <OpenGL/gl.h>
#endif
/* callback functions to be implemented in your physics plugin */
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _MSC_VER
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT
#endif
DLLEXPORT void webots_physics_init(dWorldID,dSpaceID,dJointGroupID);
DLLEXPORT int webots_physics_collide(dGeomID,dGeomID);
DLLEXPORT void webots_physics_step();
DLLEXPORT void webots_physics_step_end();
DLLEXPORT void webots_physics_cleanup();
DLLEXPORT void webots_physics_draw();
DLLEXPORT void webots_physics_predraw();
/* utility functions to be used in your callback functions */
#ifndef LINUX
extern dGeomID (*dWebotsGetGeomFromDEFProc)(const char *);
extern dBodyID (*dWebotsGetBodyFromDEFProc)(const char *);
extern void (*dWebotsSendProc)(int,const void *,int);
extern void* (*dWebotsReceiveProc)(int *);
extern void (*dWebotsConsolePrintfProc)(const char *, ...);
extern double (*dWebotsGetTimeProc)();
#define dWebotsGetGeomFromDEF(DEFName) (*dWebotsGetGeomFromDEFProc)(DEFName)
#define dWebotsGetBodyFromDEF(DEFName) (*dWebotsGetBodyFromDEFProc)(DEFName)
#define dWebotsSend(channel,buff,size) (*dWebotsSendProc)(channel,buff,size)
#define dWebotsReceive(size_ptr) (*dWebotsReceiveProc)(size_ptr)
#if defined(__VISUALC__) || defined (_MSC_VER) || defined(__BORLANDC__)
#define dWebotsConsolePrintf(format, ...) (*dWebotsConsolePrintfProc)(format, __VA_ARGS__)
#else
#define dWebotsConsolePrintf(format, ...) (*dWebotsConsolePrintfProc)(format, ## __VA_ARGS__)
#endif
#define dWebotsGetTime() (*dWebotsGetTimeProc)()
#else
dGeomID dWebotsGetGeomFromDEF(const char *DEFName);
dBodyID dWebotsGetBodyFromDEF(const char *DEFName);
void dWebotsSend(int channel,const void *buffer,int size);
void *dWebotsReceive(int *size);
void dWebotsConsolePrintf(const char *format, ...);
double dWebotsGetTime();
#endif
#ifdef __cplusplus
}
#endif
#endif /* PHYSICS_H */
生成文件:
###
### Standard Makefile for Webots physics plugins
###
### Supported platforms: Windows, Mac OS X, Linux
### Supported languages: C, C++
###
### Authors: Olivier Michel - www.cyberbotics.com
### Revised: Yvan Bourquin - September 30th, 2009.
###
### Uncomment the variables to customize the Makefile
### -----C Sources-----
###
### if your plugin uses several C source files:
C_SOURCES = my_contact_p_physics.c
### -----C++ Sources-----
###
### if your plugin uses several C++ source files:
# CPP_SOURCES = my_plugin.cpp my_clever_algo.cpp my_graphics.cpp
### or
# CC_SOURCES = my_plugin.cc my_clever_algo.cc my_graphics.cc
FRAMEWORK = -framework OpenGL -framework GLUT
### -----Options-----
###
### if special CFLAGS are necessary, for example to set optimization level or
### to find include files:
#CFLAGS=-O3 -I/System/Library/Frameworks/OpenGL.framework
###
### if your plugin needs additional libraries:
LIBRARIES=-L/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries -llibGL -llibGLU
### Do not modify: this includes Webots global Makefile.include
space :=
space +=
WEBOTS_HOME_PATH=$(subst $(space),\ ,$(strip $(subst \,/,$(WEBOTS_HOME))))
include $(WEBOTS_HOME_PATH)/resources/projects/default/plugins/physics/Makefile.include
PS:在“my_contact_p_physics.c”(我正在努力编译的.c文件中)我只需要包含一个ODE / ode.h文件和带有绝对值的physics.h文件路径。我不能在终端编译directy,因为ODE“集成”到webots中,这就是为什么我直接在webots中编译。
答案 0 :(得分:6)
gl.h就在那里,好吧 - 就在/System/Library/Frameworks/OpenGL.framework/Headers
。使用-framework OpenGL
或将-I /System/Library/Frameworks/OpenGL.framework/Headers
添加到编译器标志。假设你的文件在那里(默认情况下是这样),你应该找到它,一切都应该有效!