2017-01-31 2 views
-1

Ich versuche, meine C++ Code mit dem GNU-Compiler unter Linux mit dem folgenden MakefileFehler: boost/regex.hpp: Keine solche Datei oder das Verzeichnis

CXX=gcc #icpc 
RM=rm -f 
CPPFLAGS=-g -O3 -fopenmp 
CFLAGS= -Wall -c 
OPENMP = -fopenmp 
BIN = theVeecode_$(CXX) 

LIBS= -L /path-to-boost/boost_1_53_0/stage/lib/ -lboost_regex 

CPPSRCS=mathtools.cpp time_.cpp read_input.cpp vee_ao_calc.cpp vee_mo_calc.cpp write_int2e.cpp memory_check.cpp 
OBJS=$(subst .cpp,.o,$(CPPSRCS)) 
OBJS+=$(COBJS) 

all: $(BIN) 

$(BIN): $(OBJS) 
     $(CXX) main.cpp $(OPENMP) -o $(BIN) $(OBJS) $(LIBS) 

clean: 
     $(RM) $(OBJS) $(BIN) 

dist-clean: clean 
     $(RM) $(BIN) 

zu kompilieren Wenn ich den Befehl make laufen, bekomme ich die folgenden Fehlermeldungen:

gcc -g -O3 -fopenmp -c -o read_input.o read_input.cpp 
read_input.cpp:9:27: error: boost/regex.hpp: No such file or directory 
read_input.cpp: In function 'void input::read_n_occ()': 
read_input.cpp:95: error: 'boost' has not been declared 
read_input.cpp:95: error: 'regex_search' was not declared in this scope 
make: *** [read_input.o] Error 1 

Die read_input.cpp Datei beginnt mit

#... // other includes 
#include <boost/regex.hpp> 
using namespace std; 

namespace xxx 
{ 
//some code here 
} 

Der Bibliothekspfad „/ p ath-to-boost/boost_1_53_0/stage/lib/"enthält die Dateien libboost_regex.a, libboost_regex.so und libboost_regex.so.1.53.0.

Ich verstehe nicht, warum der Compiler die Bibliotheksdateien nicht findet. Hat jemand irgendwelche Ideen, warum es nicht funktioniert und wie man es repariert?

Vielen Dank im Voraus.

+1

Mai Schub verpasst werden include? – P0W

+0

Ja, du hast Recht. Ich war verwirrt, weil ich den Code mit dem gleichen Makefile zuvor auf einem anderen Computer kompiliert hatte, also war mir nicht klar, warum es nicht funktionierte. Wie auch immer, es funktioniert jetzt. – user3244013

Antwort

0

Wie sich herausstellte, lag das Problem im Makefile. Genauer gesagt wurde der Pfad zur Boost-Bibliothek während der Kompilierung der CPP-Dateien mit Boost nicht berücksichtigt. Fest es durch Hinzufügen der Bibliothek explizit in der Zusammenstellung Schritt:

%.o: %.cpp $(DEPS) 
     $(CXX) -c -o [email protected] $< $(CPPFLAGS) $(LIBS) 

Schließlich wird das Makefile wie folgt:

CXX=gcc #icpc 
RM=rm -f 
CPPFLAGS=-g -O3 -fopenmp 
OPENMP = -fopenmp 
BIN = theVeecode_$(CXX) 

LIBS= -I /path-to-boost/boost_1_53_0/ 
LIBS+= -L /path-to-boost/boost_1_53_0/stage/lib/ -lboost_regex 

CPPSRCS=mathtools.cpp time_.cpp read_input.cpp vee_ao_calc.cpp vee_mo_calc.cpp write_int2e.cpp memory_check.cpp 
OBJS=$(subst .cpp,.o,$(CPPSRCS)) 
DEPS=Vector3.h mathtools.h memory_check.h read_input.h time_.h vee_ao_calc.h vee_mo_calc.h write_int2e.h 

%.o: %.cpp $(DEPS) 
     $(CXX) -c -o [email protected] $< $(CPPFLAGS) $(LIBS) 

$(BIN): $(OBJS) 
     $(CXX) main.cpp $(OPENMP) -o $(BIN) $(OBJS) $(LIBS) 

clean: 
     $(RM) $(OBJS) $(BIN) 

dist-clean: clean 
     $(RM) $(BIN) 
Verwandte Themen