PDA

Visualizza la versione completa : C++ Problema compilazione con librerie esterne


Mandels
13-06-2008, 21:06
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:



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...




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/e336629c/Provatar.html

metal_prog
14-06-2008, 17:38
Non hai aggiunto alle istanze del compilatore la libreria, così non trova le funzioni che usi, devi aggiungere il file *.lib della tua libreria...

Mandels
14-06-2008, 18:30
Non riesco a capiro cosa intendi.. dove devo aggiungerlo.. e sopratutto la mia libreria non ha file .lib...

Loading