Ciao a tutti,

Ho scritto un programma che usa le librerie ANN, che ho scaricato e compilato.

Nel mio programma ho opportunamente aggiunto la riga

#include "ann/include/ANN/ANN.h"

La compilazioni (attraverso make) non restituisce errori di sintassi, ma termina inaspettatamente ritornando quando segue:


codice:
cristian@cristian-note:~/Desktop/Prova/FaceEmotion$ make
g++ -march=i686 -mmmx -msse -msse2 -msse3 -O3 -pipe -Wall -fomit-frame-pointer  -D_ENABLE_TILT -D_ENABLE_FORCE -I/usr/include/opencv/ -c core/main/faceEmotion.cpp -o core/main/faceEmotion.o
core/main/faceEmotion.cpp: In function ‘int main()’:
core/main/faceEmotion.cpp:31: warning: deprecated conversion from string constant to ‘char*’
core/main/faceEmotion.cpp:18: warning: unused variable ‘cc’
for m in  faceEmotion ; do      \
                g++ -march=i686 -mmmx -msse -msse2 -msse3 -O3 -pipe -Wall -fomit-frame-pointer  `pkg-config --cflags opencv` -Iann/include -Lann/lib -lANN -lm -lpthread  -L/usr/lib `pkg-config --libs opencv` -o $m ./core/src/ColorClassifier.o ./core/src/ColorDataset.o   ./core/main/$m.o #;  \
        done
./core/src/ColorClassifier.o: In function `KnnColorClassifier::fast_build(ColorDataset*, int, unsigned int, bool)':
ColorClassifier.cpp:(.text+0x17ec): undefined reference to `annAllocPt(int, double)'
ColorClassifier.cpp:(.text+0x180d): undefined reference to `annAllocPts(int, int)'
ColorClassifier.cpp:(.text+0x19e3): undefined reference to `ANNkd_tree::ANNkd_tree(double**, int, int, int, ANNsplitRule)'
ColorClassifier.cpp:(.text+0x24a4): undefined reference to `annDeallocPt(double*&)'
ColorClassifier.cpp:(.text+0x24b6): undefined reference to `annDeallocPts(double**&)'
collect2: ld returned 1 exit status
make: *** [main] Error 1
cristian@cristian-note:~/Desktop/Prova/FaceEmotion$
posto anceh il mio makefile, dato che il problema sia dato dal linker che non sa dove sono le librerie...

codice:
ifndef srcdir
srcdir = ./core/src
endif
ifndef maindir
maindir = ./core/main
endif

#g++ ann_sample.cpp -o ann_sample -Iann/include -Lann/lib -lANN

CXX = g++
RM = rm -f
OBJ = $(patsubst $(srcdir)/%.cpp,$(srcdir)/%.o,$(wildcard $(srcdir)/*.cpp))  

MAINOBJ = $(patsubst $(maindir)/%.cpp,$(maindir)/%.o,$(wildcard $(maindir)/*.cpp))  
EXE = $(patsubst $(maindir)/%.cpp, % ,$(wildcard $(maindir)/*.cpp))


#CDEBUG = -fpic -ggdb

CFLAGS=-march=i686 -mmmx -msse -msse2 -msse3 -O3 -pipe -Wall -fomit-frame-pointer
CXXFLAGS=${CFLAGS} ${CDEBUG}

OPENCVCONF = `pkg-config --libs opencv`
OPENCVFLAGS = `pkg-config --cflags opencv`

all: main 

main : $(OBJ) $(MAINOBJ)
	for m in $(EXE); do	\
		$(CXX) $(CXXFLAGS) $(OPENCVFLAGS) -Iann/include -Lann/lib -lANN -lm -lpthread  -L/usr/lib $(OPENCVCONF) -o $$m $(OBJ) $(maindir)/$$m.o #;	\
	done
	

%.o : %.cpp
	$(CXX) $(CXXFLAGS) -D_ENABLE_TILT -D_ENABLE_FORCE -I/usr/include/opencv/ -c $*.cpp -o $*.o

clean: 
	$(RM) $(srcdir)/*.o *~
	$(RM) $(maindir)/*.o *~

non ho idea di come sistemare il tutto... a questo link potete scaricare se vi serve i sorgenti in questione

http://www.4shared.com/file/51220711.../Provatar.html