BLACKHOLE ET SON PB

  • Créateur du sujet Créateur du sujet Membre supprimé 2
  • Date de début Date de début
Jamais lancer xDarwin mais si c comme Linux, devrais pas y avoir de pb. Dans le Terminal tu lance ton make file et celà devrais passer.
 
Bon, return dans las Dev tools et fait un Empty Project. Ensuite fait "new target" dans le menu "project" et choisi "Application".
Fait un "Add Frameworks" et inclus OpenGl ainsi que GLUT (on ne sait jamais). Ensuite ajoute les fichiers que tu as.
N'oublie pas que c pas <GL/*.h> dans les include, pour voir ce que c'est ouvre un exemple opengl mais je crois bien que c <OpenGl/*.h>

Voilà, normalement s'il n'as pas inclus des librairies autres que les standard, celà devrai fonctionner.
 
Dans les package de XDarwin, j'ai les éléments GL/glx.h et consorts. Tout ces éléments sont inclus et les liens sont bien /usr/X11R6/include/GL/glx.h par exemple, mais il semble que les dev tools ne veulent pas aller chercher ça là, malgré les liens!! Y a t'il un moyen de lui fair savoir que de nouveaux paquets sont bien présents là?
 
Faudrait que je regarde si glx.h n'existe pas dans les frameworks openGl parce que là je ne comprends pas très bien, moi j'ai jamais eut de mal à récuperer des sources d'autrui et de les recompiler sur mac avec les dev tools.
 
On m'a répondu ceci sur autre forum:
Le compilateur ne trouve pas les fichiers inclus parce qu'il ne sait pas qu'il faut les cherchers dans /usr/X11R6/include

Ca sert à rien de mettre $(INCLUDE) dans la tache qui génère le binaire, il faut le mettre dans les taches qui compilent les source en .o

D'ailleurs les tâches qui genèrent les .o n'ont pas besoin d'être aussi détaillées.. Normalement make sait déjà tout seul qu'un .cpp doit etre compilé pour faire un .o


Le prob, c'est que je suis tellement nul que je ne sais pas ou faire la modif.....
 
Ce qui créer des fichiers objets c kan tu fait le g++. Mais la je préfères voir moi même pour le glx, parce que je trouve sa étrange quand même qu'il ne le trouve pas dans la frameworks si c du OpenGl standard.
 
Je reformule le tout.... j'ai apposé une correction des chemins avec le soup de main de qqun, car mes package (entre autre glx.h) ne sont pas dans les standard OpenGLmac, mais dans les standards de XDarwin sous /usr/X11R6/include/GL ....

voici le tout:

mon makefile:

#FLAGS=-O3 -ffast-math
FLAGS= -Wall -g
INCLUDE= -I/usr/X11R6/include
LIBS= -lGL #-pthread #-lXmu -lX11 #-lXi #-lGL #-GLU
#-pthread -static
#-lstlport_gcc
LIBPATH= -L/usr/X11R6/lib
EXECUTABLE_NAME=glxwin

$(EXECUTABLE_NAME) : main.o world.o glwindow.o ant.o
g++ $(FLAGS) -o $(EXECUTABLE_NAME) main.o world.o glwindow.o ant.o $(INCLUDE) $(LIBS) $(LIBPATH)

main.o : main.cpp main.h glwindow.h world.h global.h
g++ $(FLAGS) $(INCLUDE) $(LIBS) $(LIBPATH) -c main.cpp

glwindow.o : glwindow.cpp glwindow.h world.h global.h main.h
g++ $(FLAGS) $(INCLUDE) $(LIBS) $(LIBPATH) -c glwindow.cpp

world.o : world.cpp world.h ant.h global.h fero.h main.h
g++ $(FLAGS) $(INCLUDE) $(LIBS) $(LIBPATH) -c world.cpp

ant.o : ant.cpp ant.h global.h fero.h main.h
g++ $(FLAGS) $(INCLUDE) $(LIBS) $(LIBPATH) -c ant.cpp

.PHONY : clean
clean :
-rm *.o $(EXECUTABLE_NAME) *~ core

mon output:

[SICEL-dhcp-*-*:~/Desktop/fourmiS Folder] dulrich% make
makefile:13: *** multiple target patterns. Stop.
 
Ok donc glx.h n'est pas un standard de OpenGl mac. Bon ba si tu le dit, ok. Je vais installer xDarwin si j'ai la place sur mon dur histoire de voir ce que sa donne. /ubbthreads/http://forums.macg.co/vbulletin/images/smiliesold/smile.gif
 
Aïe, je sais pas si j'aurais le courrage de faire tout çà en tout cas ce soir pas possible. /ubbthreads/http://forums.macg.co/vbulletin/images/smiliesold/frown.gif
 
Je crois que j'ai xDarwin sur un cd. Depuis le temps que je voulais le voir.
Par contre j'ai cru remarquer qu'il y avait un menu "cvs" dans les dev tools avec jag, c très intérréssant çà.
 
si ça t'intéresse je te conseille d'acheter une nouvelle revue qui vient de sortir: Precision Mac (je l'ai trouvée dans un leclerc en kiosque)

sinon il s'est corrigé deux ou trois truc, mais là je coince:

g++ -Wall -g -I/usr/X11R6/include -c main.cpp -Wall
g++ -Wall -g -I/usr/X11R6/include -c world.cpp -Wall
g++ -Wall -g -I/usr/X11R6/include -c glwindow.cpp -Wall
g++ -Wall -g -I/usr/X11R6/include -c ant.cpp -Wall
ant.cpp: In function `void __static_initialization_and_destruction_0(int,
int)':
ant.cpp:3: Internal compiler error in find_function_data, at function.c:350
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://developer.apple.com/bugreporter> for instructions.
make: *** [ant.o] Error 1


Pour ça:

#include "ant.h"

fero * Ant::raster = new fero[width*height];

Ant::Ant() {
posX = antFarmX;
posY = antFarmY;
found = false;
time = 1;
}

void Ant::update() {

double time_decrease = 0.99;
time *= time_decrease;

if (found) {
randomReturnWalk();
raster[coord(posX,posY)].found+=0.04*time;
if ((posX == antFarmX)&&(posY == antFarmY)) {
foundHome++;
cout << "home:\t" << foundHome <<"\tfood:\t"<<foundFood<<"\t\tHome"<<endl;
found = false;
time = 1;
}
} else {
randomSeekWalk();
raster[coord(posX,posY)].seek+=0.04*time;
if ((posX == foodX)&&(posY == foodY)) {
foundFood++;
cout << "home:\t" << foundHome <<"\tfood:\t"<<foundFood<<"\t\tFood"<<endl;
found = true;
time = 1;
}
}
posX += moveX;
posY += moveY;

if ( (posX < 1) || (posX > (width-1)) || (posY < 1) || (posY > (height-1))) {
// cout << "Send me back home !!!"<<endl;
posX = antFarmX;
posY = antFarmY;
found = false;
time = 1;
}



}


void Ant::display() {
double x = 2*(posX/(double)width)-1.0;
double y = 2*(posY/(double)height)-1.0;
if (found) {
glColor3d(1,1,1);
glVertex2d(x,y);
glColor3d(1,0.5,0.;
} else
glVertex2d(x,y);
}

void Ant::evalSeekCoef(double * coef) {
float base = 0.3;
float tot = 0;
int r = 1;
for (int i = -r; i < r+1; i++) {
for (int j = -r; j < r+1; j++) {
tot += nFeroF(posX+i, posY+j);
}
}
tot -= nFeroF(posX,posY);



if (tot==0) {
for (int i = 0; i < 8; i++)
coef = 1.0/8.0;
} else {
coef[0] = (nFeroF(posX , posY + 1)/tot+base)/(8*base + 1.0);
coef[1] = (nFeroF(posX + 1, posY + 1)/tot+base)/(8*base + 1.0);
coef[2] = (nFeroF(posX + 1, posY )/tot+base)/(8*base + 1.0);
coef[3] = (nFeroF(posX + 1, posY - 1)/tot+base)/(8*base + 1.0);
coef[4] = (nFeroF(posX , posY - 1)/tot+base)/(8*base + 1.0);
coef[5] = (nFeroF(posX - 1, posY - 1)/tot+base)/(8*base + 1.0);
coef[6] = (nFeroF(posX - 1, posY )/tot+base)/(8*base + 1.0);
coef[7] = (nFeroF(posX - 1, posY + 1)/tot+base)/(8*base + 1.0);
}


}

void Ant::evalFoundCoef(double * coef) {
float base = 0.1;
float tot = 0;
int r = 1;
for (int i = -r; i < r+1; i++) {
for (int j = -r; j < r+1; j++) {
tot += nFeroS(posX+i, posY+j);
}
}
tot -= nFeroS(posX,posY);



if (tot==0) {
for (int i = 0; i < 8; i++)
coef = 1.0/8.0;
} else {
coef[0] = (nFeroS(posX , posY + 1)/tot+base)/(8*base + 1.0);
coef[1] = (nFeroS(posX + 1, posY + 1)/tot+base)/(8*base + 1.0);
coef[2] = (nFeroS(posX + 1, posY )/tot+base)/(8*base + 1.0);
coef[3] = (nFeroS(posX + 1, posY - 1)/tot+base)/(8*base + 1.0);
coef[4] = (nFeroS(posX , posY - 1)/tot+base)/(8*base + 1.0);
coef[5] = (nFeroS(posX - 1, posY - 1)/tot+base)/(8*base + 1.0);
coef[6] = (nFeroS(posX - 1, posY )/tot+base)/(8*base + 1.0);
coef[7] = (nFeroS(posX - 1, posY + 1)/tot+base)/(8*base + 1.0);
}
}

int Ant::coord(int x, int y) {
return x+y*height;
}

float Ant::nFeroF(int x, int y) {
return raster[coord(x,y)].found;
}

float Ant::nFeroS(int x, int y) {
return raster[coord(x,y)].seek;
}

void Ant::randomSeekWalk() {

double coef[8];
evalSeekCoef(coef);
double dir = (rand()/(double)RAND_MAX);
double lim = 0;

if (dir < (lim += coef[0])) {
moveX=0;
moveY=1;
} else {
if (dir < (lim += coef[1])) {
moveX=1;
moveY=1;
} else {
if (dir < (lim += coef[2])) {
moveX=1;
moveY=0;
} else {
if (dir < (lim += coef[3])) {
moveX=1;
moveY=-1;
} else {
if (dir < (lim += coef[4])) {
moveX=0;
moveY=-1;
} else {
if (dir < (lim += coef[5])) {
moveX=-1;
moveY=-1;
} else {
if (dir < (lim += coef[6])) {
moveX=-1;
moveY=0;
} else {
if (dir < (lim += coef[7])) {
moveX=-1;
moveY=1;
}
}
}
}
}
}
}
}
}

void Ant::randomReturnWalk() {


double coef[8];
evalFoundCoef(coef);
double dir = (rand()/(double)RAND_MAX);
double lim = 0;

if (dir < (lim += coef[0])) {
moveX=0;
moveY=1;
} else {
if (dir < (lim += coef[1])) {
moveX=1;
moveY=1;
} else {
if (dir < (lim += coef[2])) {
moveX=1;
moveY=0;
} else {
if (dir < (lim += coef[3])) {
moveX=1;
moveY=-1;
} else {
if (dir < (lim += coef[4])) {
moveX=0;
moveY=-1;
} else {
if (dir < (lim += coef[5])) {
moveX=-1;
moveY=-1;
} else {
if (dir < (lim += coef[6])) {
moveX=-1;
moveY=0;
} else {
if (dir < (lim += coef[7])) {
moveX=-1;
moveY=1;
}
}
}
}
}
}
}
}
}
 
j'crois que c'est cette ligne qui doit lui chambouler la tête : </font><blockquote><font class="small">Citer:</font><hr />
fero * Ant::raster = new fero[width*height]; <hr /></blockquote>

maintenant à savoir par quoi le remplacer...
 
Oui c cette ligne en effet va voir dans le fichier Ant.h et dis moi ce qu'est raster et s'il est en public, private ou published. /ubbthreads/http://forums.macg.co/vbulletin/images/smiliesold/smile.gif
La ce qui est très chiant c ke c le comilo qui veut pas faire le .o /ubbthreads/http://forums.macg.co/vbulletin/images/smiliesold/frown.gif
 
ci fait

ant.h:

#include &lt;iostream&gt;
#include &lt;GL/gl.h&gt;
#include &lt;cstdlib&gt;
#include "fero.h"
#include "math.h"
#include "global.h"

#ifndef ANT_H
#define ANT_H

using namespace std;

class Ant {
public:
int posX;
int posY;
int moveX;
int moveY;
double time;
static int feroCount;
int coord(int x, int y);
bool found;
static fero * raster; &lt;------------il est là
Ant();
void evalSeekCoef(double * coef);
void evalFoundCoef(double * coef);
void randomWalk();
void randomSeekWalk();
void randomReturnWalk();
void display();
void update();
float nFeroF(int x, int y);
float nFeroS(int x, int y);

};

#endif
 
Et bin il se fait pas chier, il met tout en public. /ubbthreads/http://forums.macg.co/vbulletin/images/smiliesold/wink.gif
Bon, je penses que c le static qui doit faire chier. L'objet est static et apparement dans le .c, le compilo doit croire qu'il manipule du non static. C mon avis met là c dur à dire parce que l'erreur parle de fonction non trouvée alors qu'ici c d'un attribut qu'il s'agit.

Et si tu met :
raster = new fero[width*height];
dans la fonction Ant{} du .c et que tu vire la ligne 3 ?
PS: pour la mettre en commentaire tu met : // devant le code.
 
Superbe!!!!!

au poil, reste plus que ça:

g++ -Wall -g -I/usr/X11R6/include -c main.cpp -Wall
g++ -Wall -g -I/usr/X11R6/include -c world.cpp -Wall
g++ -Wall -g -I/usr/X11R6/include -c glwindow.cpp -Wall
g++ -Wall -g -I/usr/X11R6/include -c ant.cpp -Wall
g++ -Wall -g -o glxwin main.o world.o glwindow.o ant.o -I/usr/X11R6/include -lGL -L/usr/X11R6/lib
ld: glwindow.o illegal reference to symbol: _XCloseDisplay defined in indirectly referenced dynamic library /usr/X11R6/lib/libX11.6.dylib
make: *** [glxwin] Error 1


J'ai eu la même chose sur un autre programme de linux.... ça me permettrait de corriger sur les deux