Quiero construir mi aplicación en Linux pero no puedo hacer que mi archivo MAKE lo haga.
los problemas son las bibliotecas estáticas con las que quiero vincular. Tengo un montón de "referencia indefinida a" mensajes de error como:Referencia indefinida en el archivo MAKE de 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*)'
Aquí es mi 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 $<
El problema es que no tengo ni idea de makefiles. Acabo de copiar una existente e intenté ajustarla. Parece que no funciona, y no puedo encontrar un archivo MAKE de ejemplo que incluya bibliotecas estáticas.
El archivo MAKE está bien y está bien. El único error que está cometiendo es que usa el compilador C para compilar y vincular C++. El compilador de C++ se llama 'g ++' (en realidad son los mismos excepto por unos pocos valores predeterminados, por lo que * casi * funciona). –
No relacionado con su problema, pero no debería necesitar la regla '% .o:% .cpp', ya que make tiene una integrada. Es casi lo mismo, pero también incluye' $ (CPPFLAGS) '(banderas de preprocesador C) A menos que los excluya deliberadamente, obtendrá un archivo make "idiomático" si usa la regla implícita. https://www.gnu.org/software/make/manual/make.html es una buena lectura. El par de horas que demora en atravesar los bits importantes se amortizará con menos tiempo mirando incrédulos a makefiles dentro de, oh, unas 4 horas :-) –