2017-01-23 115 views
-1

最近我嘗試運行庫QUESO的一個簡單的例子,這裏是有關庫的信息:我的Makefile有什麼問題嗎?

http://www.quest-scidac.org/software/queso/

我跟着用戶手冊,以寫我自己的Makefile並嘗試運行的例子,這是我Makefie:

QUESO_DIR = /project/xfu/apps/queso-0.56.1 
BOOST_DIR = /share/apps/boost-1.57 
GSL_DIR = /project/cacds/apps/gsl/1.16 

INC_PATHS = -I$(QUESO_DIR)/include -I$(BOOST_DIR)/include/boost -I$(GSL_DIR)/include/gsl 

LIBS = \ 
-L$(QUESO_DIR)/lib -lqueso \ 
-L$(BOOST_DIR)/lib -lboost_program_options \ 
-L$(GSL_DIR)/lib -lgsl 

CXX = mpic++ 
CXXFLAGS += -g -Wall -c 

default : all 
.SUFFIXES : .o .C 
all : example_sip 
clean : 
    rm -f *~ 
    rm -f *.o 
    rm -f simple_sip_example 

example_sip : example_main.o example_likelihood.o example_compute.o 
    $(CXX) example_main.o \ 
      example_likelihood.o \ 
      example_compute.o \ 
      -o simple_sip_example $(LIBS) 
%.o: %.C 
    $(CXX) $(INC_PATHS) $(CXXFLAGS) $(LIBS) $< 

這是Makefile的用戶手冊: enter image description here

我跟着用戶手冊和只改變了庫路徑。但是,當我鍵入make -f Makefile_1,我得到了這些錯誤:

mpic++ -I/project/xfu/apps/queso-0.56.1/include -I/share/apps/boost-1.57/include/boost 
-I/project/cacds/apps/gsl/1.16/include/gsl -g -Wall -c 
-L/project/xfu/apps/queso-0.56.1/lib -lqueso -L/share/apps/boost-1.57/lib 
-lboost_program_options -L/project/cacds/apps/gsl/1.16/lib -lgsl example_main.C 
In file included from /project/xfu/apps/queso-0.56.1/include/queso/Environment.h:38, 
      from example_compute.h:28, 
      from example_main.C:25: 
/project/xfu/apps/queso-0.56.1/include/queso/ScopedPtr.h:44: error: ISO C++ forbids declaration of 'unique_ptr' with no type 
/project/xfu/apps/queso-0.56.1/include/queso/ScopedPtr.h:44: error: typedef name may not be a nested-name-specifier 
/project/xfu/apps/queso-0.56.1/include/queso/ScopedPtr.h:44: error: expected ';' before '<' token 
In file included from example_compute.h:28, 
      from example_main.C:25: 
/project/xfu/apps/queso-0.56.1/include/queso/Environment.h:380: error: 'Type' in class 'QUESO::ScopedPtr<QUESO::GetPot>' does not name a type 
make: *** [example_main.o] Error 1 

你可以看到這些錯誤從庫的頭文件來了。源文件來自庫,我只寫了Makefile。我在學校集羣中運行這個示例,因爲IT安裝它,所以應該沒有任何問題。所以我想這個問題可能來自我的Makefile,但我只是遵循用戶手冊。 非常感謝!

+0

你沒有按照這個例子,你在'%.o'中加入'$(LIBS)'' – cpatricio

+0

這可能是錯誤真的出現在你的代碼中,如果你在' #include '那麼你的代碼可能會影響標準頭文件。例如,如果你在'ScopedPtr.h'需要的一些常用符號上使用了'#define'等等。從這裏提出的問題沒有辦法告訴問題是什麼。 – MadScientist

+0

@cpatricio哦,是的,非常感謝您指出,但即使我在那裏刪除'$(LIBS)'也是如此。 – Han

回答

0

問題解決了。這是因爲C++ 11標準。 似乎QUESO默認是用C++ 11構建的,但我的gcc版本不支持C++ 11。更新gcc並重建庫之後,請確保使用-std=c++11,沒有這樣的問題。