Desidero creare la mia applicazione sotto Linux ma non riesco a ottenere il makefile per realizzarlo.
i problemi sono le librerie statiche con cui voglio collegarmi. Ho un sacco di "undefined reference to" i messaggi di errore del tipo:Riferimento non definito nel file makefile Linux
undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
o
undefined reference to `cgicc::Cgicc::Cgicc(cgicc::CgiInput*)'
Ecco il mio makefile:
CXX = gcc
INCL_CGICC = ../cgicc-3.2.9
INCL_OPENSSL = ../openssl-1.0.0e/include
INCL_LOG4CPLUS = ../log4cplus-1.0.4/include
INCL_BOOST = ../boost_1_46_1
INCLUDES = -I$(INCL_CGICC) -I$(INCL_OPENSSL) -I$(INCL_LOG4CPLUS) -I$(INCL_BOOST)
CXXFLAGS = -Wall -D_LINUX -DVERSNUM=2 -DVERSMAJOR=0 -DVERSMINOR=0 $(INCLUDES)
TARGET = myapp
OBJS = Main.o
all: $(TARGET)
strip -s $<
mv -f $< release
$(TARGET): $(OBJS)
$(CXX) -static -o [email protected] $(OBJS) \
../cgicc-3.2.9/cgicc/.libs/libcgicc.a \
../openssl-1.0.0e/libssl.a \
../openssl-1.0.0e/libcrypto.a \
../log4cplus-1.0.4/src/.libs/liblog4cplus.a \
-ldl -lpthread
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $<
Il problema è che non ho idea di makefile. Ho appena copiato uno esistente e ho provato ad adattarlo. Non sembra funzionare, e non riesco a trovare un makefile di esempio che include librerie statiche.
Il makefile è tutto a posto. L'unico errore che stai facendo è che usi il compilatore C per compilare e collegare C++. Il compilatore C++ si chiama 'g ++' (sono in effetti gli stessi tranne per alcuni default, che è il motivo per cui * quasi * funziona). –
Non correlato al tuo problema, ma non dovresti aver bisogno della regola '% .o:% .cpp', dato che make ne ha uno incorporato. È quasi lo stesso, ma include anche' $ (CPPFLAGS) '(flag di preprocessore C). Quindi, a meno che tu non li escluda deliberatamente, otterrai un makefile più "idiomatico" se usi semplicemente la regola implicita. https://www.gnu.org/software/make/manual/make.html è una buona lettura. Il paio di ore necessarie per superare i bit importanti verrà ripagato con meno tempo fissando i makefile increduli dentro, oh, circa 4 ore :-) –