C++ 对“dlopen'”的未定义引用';dlsym';dlcose';

C++ 对“dlopen'”的未定义引用';dlsym';dlcose';,c++,ubuntu,makefile,configure,dlopen,C++,Ubuntu,Makefile,Configure,Dlopen,我正在使用Ubuntu12.04并尝试安装multicube explorer进行设计空间探索。 我是这些makefile和linux内部构件的新手。 我按照以下步骤进行安装 ./configure make 然后我得到了错误信息。以下是日志(为可读性而重新格式化的命令行) root@root:/home/snu/Desktop/m3explorer#make g++-L.-L/usr/lib/x86_64-linux-gnu-lxml2-ldl\ -Wl,-不需要,-导出动态-pthread

我正在使用Ubuntu12.04并尝试安装multicube explorer进行设计空间探索。 我是这些makefile和linux内部构件的新手。 我按照以下步骤进行安装

./configure
make
然后我得到了错误信息。以下是日志(为可读性而重新格式化的命令行)

root@root:/home/snu/Desktop/m3explorer#make
g++-L.-L/usr/lib/x86_64-linux-gnu-lxml2-ldl\
-Wl,-不需要,-导出动态-pthread\
m3_命令.o m3_环境o m3_点.o m3_模拟实用程序.o\
m3_数据库.o m3_语法.o m3_映射.o m3_选项_utils.o\
m3_指针_垃圾桶。o m3_令牌。o m3_对象。o m3_外壳。o\
m3_vector.o m3_driver_utils.o m3_parser.o m3_shell_variables.o\
m3_列表.o m3_对象_实用程序.o m3_参数.o m3_常用_实用程序.o\
m3_例外。o m3_设计_空间。o m3_doe_utils.o m3_gen_html.o\
m3_xdr_api.o m3_rsm.o-o m3explorer
m3_commands.o:在函数“prs_command_db_export_xml(std::basic_string)”中:
m3_commands.cc:(.text+0x379c):对“xmlkepblanksdefault”的未定义引用
m3_commands.cc:(.text+0x37a6):对“xmlThrDefIndentTreeOutput”的未定义引用
m3_commands.cc:(.text+0x37b0):对“xmlThrDefTreeIndentString”的未定义引用
m3_commands.cc:(.text+0x37ba):对“xmlNewDoc”的未定义引用
m3_commands.cc:(.text+0x37d0):对“xmlNewNode”的未定义引用
m3_commands.cc:(.text+0x37f0):对“xmlNewProp”的未定义引用
m3_commands.cc:(.text+0x3809):对“xmlNewProp”的未定义引用
m3_commands.cc:(.text+0x3822):对“xmlDocSetRootElement”的未定义引用
m3_commands.cc:(.text+0x3a6c):对“xmlNewChild”的未定义引用
m3_commands.cc:(.text+0x3a8b):对“xmlNewChild”的未定义引用
m3_commands.cc:(.text+0x3aaa):对“xmlNewChild”的未定义引用
m3_commands.cc:(.text+0x3aea):对“xmlNewChild”的未定义引用
m3_commands.cc:(.text+0x3b19):对“xmlNewProp”的未定义引用
m3_commands.cc:(.text+0x3cb2):对“xmlNewChild”的未定义引用
m3_commands.cc:(.text+0x3d75):对“xmlNewProp”的未定义引用
m3_commands.cc:(.text+0x3d98):对“xmlNewProp”的未定义引用
m3_commands.cc:(.text+0x3e94):对“xmlNewProp”的未定义引用
m3_commands.cc:(.text+0x3f30):对“xmlNewChild”的未定义引用
m3_commands.cc:(.text+0x3f5f):对“xmlNewProp”的未定义引用
m3_commands.cc:(.text+0x3fad):对“xmlNewProp”的未定义引用
m3_commands.cc:(.text+0x407e):对“xmlSaveFileEnc”的未定义引用
m3_opt_utils.o:在函数'opt_select_optimizer(m3_env*,std::basic_string&')中:
m3_opt_utils.cc:(.text+0x51):对“dlopen”的未定义引用
m3_opt_utils.cc:(.text+0x71):对“dlsym”的未定义引用
m3_driver_utils.o:在函数“drv_select_driver(m3_env*,std::basic_string&)”中:
m3_driver_utils.cc:(.text+0x51):对“dlopen”的未定义引用
m3_driver_utils.cc:(.text+0x71):对“dlsym”的未定义引用
m3_driver_utils.cc:(.text+0x109):对“dlerror”的未定义引用
m3_common_utils.o:在函数'm3_look_for_filename_In_search_path(m3_env*,std::basic_string&,std::basic_string&')中:
m3_common_utils.cc:(.text+0x403):对“dlopen”的未定义引用
m3_common_utils.cc:(.text+0x430):对“dlclose”的未定义引用
m3_doe_utils.o:在函数'doe_select_doe(m3_env*,std::basic_string&')中:
m3_doe_utils.cc:(.text+0x51):对“dlopen”的未定义引用
m3_doe_utils.cc:(.text+0x71):对“dlsym”的未定义引用
collect2:ld返回了1个退出状态
make:**[m3explorer]错误1
下面是makefile的内容

# Makefile for Multicube Explorer 
# 
# (C) Politecnico di Milano and V. Zaccaria

DSTDIR = /home/snu/Desktop/m3explorer
SRCDIR = /home/snu/Desktop/m3explorer/src
INCDIR = /home/snu/Desktop/m3explorer/src
GPLDIR = /home/snu/Desktop/m3explorer/gpl
OTHERCFLAGS = 
OTHERCXXFLAGS = -D__M3EXPLORER_VERSION__=\"release_1_1\" -I/usr/include/libxml2
OTHERLINKFLAGS = -L. -L/usr/lib/x86_64-linux-gnu -lxml2
GPLCXXFLAGS = 
GPLLINKFLAGS = 
IMAGE = /home/snu/Desktop/m3explorer/image
BUILDSHEPARD = no
BUILDSPLINE= no
BUILDNEURAL= nn
BUILDRBF= no
BUILDREGRESSION= no

CXX=g++
AR=ar cr
RANLIB=ranlib
SHLIB_LD=g++ -fPIC
 CFLAGS= $(OTHERCFLAGS) -I$(INCDIR)         
#CFLAGS= -Wall -g -I/usr/include/libxml2         commented by Tarun. If you want to uncomment. then comment next line

 CXXFLAGS= $(OTHERCXXFLAGS) -I$(INCDIR)      
#CXXFLAGS=-lxml2                                        commented by Tarun. If you want to uncomment. then comment next line

GPLCXXFLAGS += $(OTHERCXXFLAGS) 

OS_NAME = $(shell uname -s)

ifeq ("$(OS_NAME)", "SunOS")
CXXFLAGS += -D__SOLARIS__
CXXSOFLAGS = -shared -fPIC 
endif

ifeq ("$(OS_NAME)", "Darwin")
CXXFLAGS += -g -D__MAC_OSX__
CXXSOFLAGS = -fno-common -bundle -flat_namespace -undefined suppress
endif

ifeq ("$(OS_NAME)", "Linux")
CXXFLAGS += -pthread
CXXSOFLAGS = -g -shared -fPIC 
OTHERLINKFLAGS += -ldl -Wl,--no-as-needed,-export-dynamic -pthread     #--no-as-needed, is added by tarun
endif

#####################################
#     CREATE SYMBOLIC TARGETS       #
#####################################


M3EXPLORER_TARGETS = m3_commands.o m3_env.o m3_point.o m3_sim_utils.o m3_database.o m3_grammar.o m3_map.o m3_opt_utils.o m3_pointer_trash.o m3_tokens.o m3_object.o m3_shell.o m3_vector.o m3_driver_utils.o m3_parser.o m3_shell_variables.o m3_list.o m3_object_utils.o m3_arg.o m3_common_utils.o m3_exception.o m3_design_space.o m3_doe_utils.o m3_gen_html.o m3_xdr_api.o m3_rsm.o

M3EXPLORER_INCLUDES = m3_commands.h m3_driver_utils.h m3_list.h m3_object_utils.h m3_parser.h m3_shell_variables.h m3_database.h m3_env.h m3_map.h m3_opt_utils.h m3_point.h m3_sim_utils.h m3_driver.h m3_object.h m3_optimizer.h m3_pointer_trash.h m3_vector.h m3_arg.h m3_common_utils.h m3_exception.h m3_design_space.h m3_doe.h m3_doe_utils.h drivers/libm3_xml_driver.h m3_gen_html.h m3_xdr_api.h m3_rsm.h

M3EXPLORER_INCDIR_INCLUDES = $(patsubst %.h, $(INCDIR)/%.h, $(M3EXPLORER_INCLUDES))

OPTIMIZERS_SRC = libm3_pareto_doe.cc libm3_aprs.cc libm3_mosa.cc libm3_mopso.cc libm3_nsga_II.cc libm3_linear_scan.cc libm3_femo.cc libm3_semo.cc libm3_gemo.cc
OPTIMIZERS_TARGET = $(patsubst %.cc, %.so, $(OPTIMIZERS_SRC))

DOE_SRC = libm3_full_doe.cc libm3_random_doe.cc libm3_two_level_ff.cc libm3_two_level_ff_extended.cc libm3_scrambled_doe.cc
DOE_TARGET = $(patsubst %.cc, %.so, $(DOE_SRC))

DRIVERS_SRC = libm3_test_driver.cc libm3_xml_driver.cc libm3_dtlz_driver.cc 
# libm3_counter_driver.cc
DRIVERS_TARGET = $(patsubst %.cc, %.so, $(DRIVERS_SRC))

# Tells make to search for sources into SRCDIR, SRCDIR/optimizers and SRCDIR/drivers
VPATH=$(SRCDIR):$(SRCDIR)/optimizers:$(SRCDIR)/drivers:$(SRCDIR)/doe:$(SRCDIR)/../gpl:$(SRCDIR)/../gpl/splines:$(SRCDIR)/../gpl/rbf

TARGET = m3explorer 

#####################################
#      CREATE RSM TARGETS           #
#####################################

RSM_TARGETS=

ifeq ("$(BUILDSHEPARD)", "yes")
RSM_TARGETS += sh_i 
CXXFLAGS += -D__M3_COMPILE_SHEPARD_RSM__
endif

ifeq ("$(BUILDSPLINE)", "yes")
RSM_TARGETS += spline 
CXXFLAGS += -D__M3_COMPILE_SPLINE_RSM__
endif

ifeq ("$(BUILDNEURAL)", "yes")
RSM_TARGETS += nn 
CXXFLAGS += -D__M3_COMPILE_NEURAL_RSM__
endif

ifeq ("$(BUILDRBF)", "yes")
RSM_TARGETS += rbf_interpolator
CXXFLAGS += -D__M3_COMPILE_RBF_RSM__
endif

ifeq ("$(BUILDREGRESSION)", "yes")
RSM_TARGETS += regressor
CXXFLAGS += -D__M3_COMPILE_REGRESSION_RSM__
endif

#####################################
#     CREATE BUILD TARGETS          #
#####################################

all: $(TARGET) $(OPTIMIZERS_TARGET) $(DRIVERS_TARGET) $(DOE_TARGET) $(RSM_TARGETS)

#############################
#       ENGINE BUILD        #
#############################

m3explorer: $(M3EXPLORER_TARGETS) 
    $(CXX) $(OTHERLINKFLAGS) $^ -o $@


%.o: %.cc $(M3EXPLORER_INCDIR_INCLUDES)
    $(CXX) -c  $< -o $@ $(CXXFLAGS) 

%.so: %.cc $(M3EXPLORER_INCDIR_INCLUDES)
    $(CXX) $< -o $@ $(CXXSOFLAGS) $(CXXFLAGS) 

m3_grammar.o: $(SRCDIR)/m3_grammar.yy 
    cp $(SRCDIR)/m3_grammar.yy .
    bison -d $(SRCDIR)/m3_grammar.yy -o bof.cc
    cp bof*h* m3_grammar.h
    cp bof*cc m3_grammar.cc
    $(CXX) -c  m3_grammar.cc -o $@ $(CXXFLAGS)

m3_tokens.o: $(SRCDIR)/m3_tokens.ll 
    flex $(SRCDIR)/m3_tokens.ll
    mv lex.yy.c m3_tokens.cc
    $(CXX) -c  m3_tokens.cc -o $@ -I. $(CXXFLAGS) 

#############################
#       RSM BUILD       #
#############################

XDR_DEPS= gpl_xdr_api.o gpl_xdr_api.h

gpl_xdr_api.o: gpl_xdr_api.cc gpl_xdr_api.h
    $(CXX) -c  $< -o $@ $(GPLCXXFLAGS) -I$(GPLDIR)

sh_i: sh_i.cc $(XDR_DEPS) 
    $(CXX) -o gpl_xdr_api.o $@ $< $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR)

nn: cascade.c $(XDR_DEPS)
     $(CXX) -o gpl_xdr_api.o -lpthread $@ $< $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR)

SPLINE_OBJ=converter.o parameters.o spline.o r_wrapper.o spline_script.o
SPLINE_INC=r_wrapper.hpp spline_script.hpp converter.hpp parameters.h

$(SPLINE_OBJ): %.o: %.cc $(SPLINE_INC) 
    $(CXX) -c $< -o $@ $(GPLCXXFLAGS) -I$(GPLDIR)

spline: $(SPLINE_OBJ) $(XDR_DEPS)
    $(CXX) -o $@ $^ $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR) 

RBF_OBJ=bvp.o diff_op.o interpolator.o linalg.o utils.o ddm.o error.o func.o rbf.o interpolatorRBF.o
RBF_INC= bvp.hpp  ddm.hpp  diff_op.hpp  error.hpp  func.hpp  interpolator.hpp  linalg.hpp  rbf.hpp  utils.hpp

$(RBF_OBJ): %.o: %.cpp $(RBF_INC) 
    $(CXX) -c $< -o $@ $(GPLCXXFLAGS) -I$(GPLDIR)

rbf_interpolator: $(RBF_OBJ) $(XDR_DEPS)
    $(CXX) -o $@ $^ $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR) 

regressor: regressor.cc $(XDR_DEPS) 
    $(CXX) -o gpl_xdr_api.o $@ $< $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR)

#############################
#       CLEAN BUILD     #
#############################

clean:
    rm -f *.o $(TARGET) *.cc *.hh *.so *.h *.yy
    rm -rf m3explorer* test*_output tmp

dist-clean:
    rm -f *.o $(TARGET) *.cc *.hh *.so *.scr *.xml *.scr do_tests *.h *.yy doxygen.cfg makefile config.status
    rm -rf m3explorer* test*_output tmp $(RSM_TARGETS)

ifeq ("$(OS_NAME)", "Darwin")
dist:
            tar --directory $(SRCDIR)/../.. -c -v -z -f m3explorer_release_1_1_src.tar.gz m3explorer --exclude "*.svn*" --exclude "build"
endif

ifeq ("$(OS_NAME)", "Linux")
dist:
            tar --exclude="*.svn*" --directory $(SRCDIR)/../.. -c -v -z -f m3explorer_release_1_1_src.tar.gz m3explorer 
endif

doc:
            doxygen $(DSTDIR)/doxygen.cfg 

ifeq ("$(OS_NAME)", "Linux")
bin-dist: install doc
            tar --exclude="*.svn*" --directory $(IMAGE)/.. -c -v -z -f m3explorer_release_1_1_linux_$(shell uname -r)_bin.tar.gz $(shell cd $(IMAGE) && pwd | xargs basename) 
endif

ifeq ("$(OS_NAME)", "Linux")
doc-dist: install doc
            tar --exclude="*.svn*" --directory $(IMAGE) -c -v -z -f m3explorer_release_1_1_docs.tar.gz $(shell cd $(IMAGE)/doc && pwd | xargs basename) 
endif


#############################
#      INSTALL BUILD        #
#############################

# Note add: install -m 744 $(SRCDIR)/../tests/*.ref $(IMAGE)/tests
# install -m 744 $(SRCDIR)/../tests/stub_test.py $(IMAGE)/tests

install: all 
    @mkdir -p $(IMAGE)
    @mkdir -p $(IMAGE)/bin
    @mkdir -p $(IMAGE)/lib
    @mkdir -p $(IMAGE)/schemas
    @mkdir -p $(IMAGE)/scripts
    @mkdir -p $(IMAGE)/examples
    @mkdir -p $(IMAGE)/examples/simple_sim
    @mkdir -p $(IMAGE)/examples/beverage_can
    @mkdir -p $(IMAGE)/examples/mpeg
    @mkdir -p $(IMAGE)/rsm
    @mkdir -p $(IMAGE)/tests
    @mkdir -p $(IMAGE)/html
    @mkdir -p $(IMAGE)/latex
    @mkdir -p $(IMAGE)/html/template_results_page_files
    install -m 744 $(DSTDIR)/*.so $(IMAGE)/lib
    install -m 744 $(DSTDIR)/multicube_design_space_test*.xml $(IMAGE)/tests
    install -m 744 $(DSTDIR)/debug_*scr $(IMAGE)/tests
    install -m 744 $(DSTDIR)/create_*scr $(IMAGE)/tests
    install -m 744 $(DSTDIR)/do_tests $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../html/*.html $(IMAGE)/html
    install -m 744 $(SRCDIR)/../latex/*.tex $(IMAGE)/latex
    install -m 744 $(SRCDIR)/../html/template_results_page_files/* $(IMAGE)/html/template_results_page_files
    install -m 744 $(SRCDIR)/../schemas/*.xsd $(IMAGE)/schemas
    install -m 744 $(SRCDIR)/../scripts/*.scr $(IMAGE)/scripts
    install -m 744 $(SRCDIR)/../scripts/*.xml $(IMAGE)/examples/mpeg
    install -m 744 $(SRCDIR)/../scripts/full_*.gz $(IMAGE)/examples/mpeg
    install -m 744 $(SRCDIR)/../scripts/*mpeg* $(IMAGE)/examples/mpeg
    install -m 744 $(SRCDIR)/../tests/test*output.ref $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/db7.xml.ref $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/test_xml*.scr $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/test_ff*.scr $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/mpeg_dse.scr $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/mpeg_export_xml.scr $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/pareto_mpeg4.db $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/stub_*.py $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/simple_sim/simple_sim.py $(IMAGE)/examples/simple_sim
    install -m 744 $(SRCDIR)/../tests/simple_sim/simple_sim_scr.scr $(IMAGE)/examples/simple_sim
    install -m 744 $(DSTDIR)/simple_sim_ds.xml $(IMAGE)/examples/simple_sim
    install -m 744 $(SRCDIR)/../tests/beverage_can/beverage_can.py $(IMAGE)/examples/beverage_can
    install -m 744 $(SRCDIR)/../tests/beverage_can/beverage_can_scr.scr $(IMAGE)/examples/beverage_can
    install -m 744 $(DSTDIR)/beverage_can_ds.xml $(IMAGE)/examples/beverage_can
    install -m 744 $(SRCDIR)/../gpl/*xdr* $(IMAGE)/rsm
    @mkdir -p $(IMAGE)/include
    install -m 744 $(DSTDIR)/m3explorer $(IMAGE)/bin
    @for hdr in $(INCDIR)/*.h ; do \
          if cmp -s $$hdr $(IMAGE)/include/`basename $$hdr`; then : ; else \
            echo "Installing $$hdr to $(IMAGE)/include"; \
            install -m 644 $$hdr $(IMAGE)/include; \
          fi; \
        done
    if [ -e $(DSTDIR)/sh_i ] ; then \
         install -m 744 $(DSTDIR)/sh_i $(IMAGE)/rsm; \
    fi ; \
    if [ -e $(DSTDIR)/nn ] ; then \
         install -m 744 $(DSTDIR)/nn $(IMAGE)/rsm; \
    fi ; \
    if [ -e $(DSTDIR)/spline ] ; then \
         install -m 744 $(DSTDIR)/spline $(IMAGE)/rsm; \
    fi ; \
    if [ -e $(DSTDIR)/rbf_interpolator ] ; then \
         install -m 744 $(DSTDIR)/rbf_interpolator $(IMAGE)/rsm; \
    fi ; \
    if [ -e $(DSTDIR)/regressor ] ; then \
         install -m 744 $(DSTDIR)/regressor $(IMAGE)/rsm; \
    fi ; \
    chmod a+x $(IMAGE)/bin/*
    chmod a+x $(IMAGE)/lib/*
    chmod a+x $(IMAGE)/rsm/*
    chmod a+x $(IMAGE)/tests/do_tests

install-doc: install doc
#Multicube Explorer的Makefile
# 
#(C)Politecnico di Milano和V.Zaccaria
DSTDIR=/home/snu/Desktop/m3explorer
SRCDIR=/home/snu/Desktop/m3explorer/src
INCDIR=/home/snu/Desktop/m3explorer/src
GPLDIR=/home/snu/Desktop/m3explorer/gpl
其他CFLAGS=
其他cxxflags=-D\uuuum3explorer\u VERSION\uuuu=\“release\u 1\u 1\”-I/usr/include/libxml2
OTHERLINKFLAGS=-L.-L/usr/lib/x86_64-linux-gnu-lxml2
GPLCXXFLAGS=
GplinkFlags=
IMAGE=/home/snu/Desktop/m3explorer/IMAGE
BUILDSHEPARD=否
BUILDSPLINE=否
神经网络
BUILDRBF=否
BUILDREGRESSION=否
CXX=g++
AR=AR-cr
RANLIB=RANLIB
SHLIB_LD=g++-fPIC
CFLAGS=$(其他CFLAGS)-I$(INCDIR)
#CFLAGS=-Wall-g-I/usr/include/libxml2由Tarun评论。如果你想取消注释。然后评论下一行
CXXFLAGS=$(其他CXXFLAGS)-I$(INCDIR)
#CXXFLAGS=-lxml2由Tarun注释。如果你想取消注释。然后评论下一行
GPLCXXFLAGS+=$(其他CXxFlags)
OS_NAME=$(shell uname-s)
ifeq($(OS_名称)”,“SunOS”)
CXXFLAGS+=-D_uSolaris__
CXXSOFLAGS=-shared-fPIC
恩迪夫
ifeq($(OS_名称)”,“达尔文”)
CXXFLAGS+=-g-D_uuMac_OSX__
CXXSOFLAGS=-fno common-bundle-flat_名称空间-undefined suppress
恩迪夫
ifeq($(操作系统名称)”,“Linux”)
CXXFLAGS+=-pthread
CXXSOFLAGS=-g-shared-fPIC
OTHERLINKFLAGS+=-ldl-Wl,--no-as-needed,-export-dynamic-pthread#--no-as-needed由tarun添加
恩迪夫
#####################################
#创建象征性目标#
#####################################
M3EXPLORER\u TARGETS=m3\u commands.o m3\u env.o m3\u point.o m3\u sim\u utils.o m3\u database.o m3\u语法.o m3\u map.o m3\u opt\u utils.o m3\u pointer\u trash.o m3\u tokens.o m3\u object.o m3\u shell.o m3\u vector.o m3\u解析器.o m3\u shell变量.o m3\u m3\u列表.o m3\u object\u utils.o m3\u arg.o m3\u公共空间设计异常m3_gen_html.o m3_xdr_api.o m3_rsm.o
M3EXPLORER\u包括=m3\u命令、hm3\u驱动程序实用程序、hm3\u列表、hm3\u对象实用程序、hm3\u解析器、hm3\u shell\u变量、hm3\u数据库、hm3\u环境、hm3\u映射、hm3\u选项实用程序、hm3\u点、hm3\u模拟实用程序、hm3\u驱动程序、hm3\u对象、hm3\u优化器、hm3\u指针、垃圾桶、hm3\u向量、hm3\u arg公共实用程序、hm3\u空间设计异常、d3h\udrivers/libm3_xml_driver.hm3_gen_html.hm3_xdr_api.hm3_rsm.h
M3EXPLORER\u INCDIR\u INCLUDES=$(patsubst%.h,$(INCDIR)/%.h,$(M3EXPLORER\u INCLUDES))
优化器\u SRC=libm3\u pareto\u doe.cc libm3\u aprs.cc libm3\u mosa.cc libm3\u mopso.cc libm3\u nsg
# Makefile for Multicube Explorer 
# 
# (C) Politecnico di Milano and V. Zaccaria

DSTDIR = /home/snu/Desktop/m3explorer
SRCDIR = /home/snu/Desktop/m3explorer/src
INCDIR = /home/snu/Desktop/m3explorer/src
GPLDIR = /home/snu/Desktop/m3explorer/gpl
OTHERCFLAGS = 
OTHERCXXFLAGS = -D__M3EXPLORER_VERSION__=\"release_1_1\" -I/usr/include/libxml2
OTHERLINKFLAGS = -L. -L/usr/lib/x86_64-linux-gnu -lxml2
GPLCXXFLAGS = 
GPLLINKFLAGS = 
IMAGE = /home/snu/Desktop/m3explorer/image
BUILDSHEPARD = no
BUILDSPLINE= no
BUILDNEURAL= nn
BUILDRBF= no
BUILDREGRESSION= no

CXX=g++
AR=ar cr
RANLIB=ranlib
SHLIB_LD=g++ -fPIC
 CFLAGS= $(OTHERCFLAGS) -I$(INCDIR)         
#CFLAGS= -Wall -g -I/usr/include/libxml2         commented by Tarun. If you want to uncomment. then comment next line

 CXXFLAGS= $(OTHERCXXFLAGS) -I$(INCDIR)      
#CXXFLAGS=-lxml2                                        commented by Tarun. If you want to uncomment. then comment next line

GPLCXXFLAGS += $(OTHERCXXFLAGS) 

OS_NAME = $(shell uname -s)

ifeq ("$(OS_NAME)", "SunOS")
CXXFLAGS += -D__SOLARIS__
CXXSOFLAGS = -shared -fPIC 
endif

ifeq ("$(OS_NAME)", "Darwin")
CXXFLAGS += -g -D__MAC_OSX__
CXXSOFLAGS = -fno-common -bundle -flat_namespace -undefined suppress
endif

ifeq ("$(OS_NAME)", "Linux")
CXXFLAGS += -pthread
CXXSOFLAGS = -g -shared -fPIC 
OTHERLINKFLAGS += -ldl -Wl,--no-as-needed,-export-dynamic -pthread     #--no-as-needed, is added by tarun
endif

#####################################
#     CREATE SYMBOLIC TARGETS       #
#####################################


M3EXPLORER_TARGETS = m3_commands.o m3_env.o m3_point.o m3_sim_utils.o m3_database.o m3_grammar.o m3_map.o m3_opt_utils.o m3_pointer_trash.o m3_tokens.o m3_object.o m3_shell.o m3_vector.o m3_driver_utils.o m3_parser.o m3_shell_variables.o m3_list.o m3_object_utils.o m3_arg.o m3_common_utils.o m3_exception.o m3_design_space.o m3_doe_utils.o m3_gen_html.o m3_xdr_api.o m3_rsm.o

M3EXPLORER_INCLUDES = m3_commands.h m3_driver_utils.h m3_list.h m3_object_utils.h m3_parser.h m3_shell_variables.h m3_database.h m3_env.h m3_map.h m3_opt_utils.h m3_point.h m3_sim_utils.h m3_driver.h m3_object.h m3_optimizer.h m3_pointer_trash.h m3_vector.h m3_arg.h m3_common_utils.h m3_exception.h m3_design_space.h m3_doe.h m3_doe_utils.h drivers/libm3_xml_driver.h m3_gen_html.h m3_xdr_api.h m3_rsm.h

M3EXPLORER_INCDIR_INCLUDES = $(patsubst %.h, $(INCDIR)/%.h, $(M3EXPLORER_INCLUDES))

OPTIMIZERS_SRC = libm3_pareto_doe.cc libm3_aprs.cc libm3_mosa.cc libm3_mopso.cc libm3_nsga_II.cc libm3_linear_scan.cc libm3_femo.cc libm3_semo.cc libm3_gemo.cc
OPTIMIZERS_TARGET = $(patsubst %.cc, %.so, $(OPTIMIZERS_SRC))

DOE_SRC = libm3_full_doe.cc libm3_random_doe.cc libm3_two_level_ff.cc libm3_two_level_ff_extended.cc libm3_scrambled_doe.cc
DOE_TARGET = $(patsubst %.cc, %.so, $(DOE_SRC))

DRIVERS_SRC = libm3_test_driver.cc libm3_xml_driver.cc libm3_dtlz_driver.cc 
# libm3_counter_driver.cc
DRIVERS_TARGET = $(patsubst %.cc, %.so, $(DRIVERS_SRC))

# Tells make to search for sources into SRCDIR, SRCDIR/optimizers and SRCDIR/drivers
VPATH=$(SRCDIR):$(SRCDIR)/optimizers:$(SRCDIR)/drivers:$(SRCDIR)/doe:$(SRCDIR)/../gpl:$(SRCDIR)/../gpl/splines:$(SRCDIR)/../gpl/rbf

TARGET = m3explorer 

#####################################
#      CREATE RSM TARGETS           #
#####################################

RSM_TARGETS=

ifeq ("$(BUILDSHEPARD)", "yes")
RSM_TARGETS += sh_i 
CXXFLAGS += -D__M3_COMPILE_SHEPARD_RSM__
endif

ifeq ("$(BUILDSPLINE)", "yes")
RSM_TARGETS += spline 
CXXFLAGS += -D__M3_COMPILE_SPLINE_RSM__
endif

ifeq ("$(BUILDNEURAL)", "yes")
RSM_TARGETS += nn 
CXXFLAGS += -D__M3_COMPILE_NEURAL_RSM__
endif

ifeq ("$(BUILDRBF)", "yes")
RSM_TARGETS += rbf_interpolator
CXXFLAGS += -D__M3_COMPILE_RBF_RSM__
endif

ifeq ("$(BUILDREGRESSION)", "yes")
RSM_TARGETS += regressor
CXXFLAGS += -D__M3_COMPILE_REGRESSION_RSM__
endif

#####################################
#     CREATE BUILD TARGETS          #
#####################################

all: $(TARGET) $(OPTIMIZERS_TARGET) $(DRIVERS_TARGET) $(DOE_TARGET) $(RSM_TARGETS)

#############################
#       ENGINE BUILD        #
#############################

m3explorer: $(M3EXPLORER_TARGETS) 
    $(CXX) $(OTHERLINKFLAGS) $^ -o $@


%.o: %.cc $(M3EXPLORER_INCDIR_INCLUDES)
    $(CXX) -c  $< -o $@ $(CXXFLAGS) 

%.so: %.cc $(M3EXPLORER_INCDIR_INCLUDES)
    $(CXX) $< -o $@ $(CXXSOFLAGS) $(CXXFLAGS) 

m3_grammar.o: $(SRCDIR)/m3_grammar.yy 
    cp $(SRCDIR)/m3_grammar.yy .
    bison -d $(SRCDIR)/m3_grammar.yy -o bof.cc
    cp bof*h* m3_grammar.h
    cp bof*cc m3_grammar.cc
    $(CXX) -c  m3_grammar.cc -o $@ $(CXXFLAGS)

m3_tokens.o: $(SRCDIR)/m3_tokens.ll 
    flex $(SRCDIR)/m3_tokens.ll
    mv lex.yy.c m3_tokens.cc
    $(CXX) -c  m3_tokens.cc -o $@ -I. $(CXXFLAGS) 

#############################
#       RSM BUILD       #
#############################

XDR_DEPS= gpl_xdr_api.o gpl_xdr_api.h

gpl_xdr_api.o: gpl_xdr_api.cc gpl_xdr_api.h
    $(CXX) -c  $< -o $@ $(GPLCXXFLAGS) -I$(GPLDIR)

sh_i: sh_i.cc $(XDR_DEPS) 
    $(CXX) -o gpl_xdr_api.o $@ $< $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR)

nn: cascade.c $(XDR_DEPS)
     $(CXX) -o gpl_xdr_api.o -lpthread $@ $< $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR)

SPLINE_OBJ=converter.o parameters.o spline.o r_wrapper.o spline_script.o
SPLINE_INC=r_wrapper.hpp spline_script.hpp converter.hpp parameters.h

$(SPLINE_OBJ): %.o: %.cc $(SPLINE_INC) 
    $(CXX) -c $< -o $@ $(GPLCXXFLAGS) -I$(GPLDIR)

spline: $(SPLINE_OBJ) $(XDR_DEPS)
    $(CXX) -o $@ $^ $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR) 

RBF_OBJ=bvp.o diff_op.o interpolator.o linalg.o utils.o ddm.o error.o func.o rbf.o interpolatorRBF.o
RBF_INC= bvp.hpp  ddm.hpp  diff_op.hpp  error.hpp  func.hpp  interpolator.hpp  linalg.hpp  rbf.hpp  utils.hpp

$(RBF_OBJ): %.o: %.cpp $(RBF_INC) 
    $(CXX) -c $< -o $@ $(GPLCXXFLAGS) -I$(GPLDIR)

rbf_interpolator: $(RBF_OBJ) $(XDR_DEPS)
    $(CXX) -o $@ $^ $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR) 

regressor: regressor.cc $(XDR_DEPS) 
    $(CXX) -o gpl_xdr_api.o $@ $< $(GPLCXXFLAGS) $(GPLLINKFLAGS) -I$(GPLDIR)

#############################
#       CLEAN BUILD     #
#############################

clean:
    rm -f *.o $(TARGET) *.cc *.hh *.so *.h *.yy
    rm -rf m3explorer* test*_output tmp

dist-clean:
    rm -f *.o $(TARGET) *.cc *.hh *.so *.scr *.xml *.scr do_tests *.h *.yy doxygen.cfg makefile config.status
    rm -rf m3explorer* test*_output tmp $(RSM_TARGETS)

ifeq ("$(OS_NAME)", "Darwin")
dist:
            tar --directory $(SRCDIR)/../.. -c -v -z -f m3explorer_release_1_1_src.tar.gz m3explorer --exclude "*.svn*" --exclude "build"
endif

ifeq ("$(OS_NAME)", "Linux")
dist:
            tar --exclude="*.svn*" --directory $(SRCDIR)/../.. -c -v -z -f m3explorer_release_1_1_src.tar.gz m3explorer 
endif

doc:
            doxygen $(DSTDIR)/doxygen.cfg 

ifeq ("$(OS_NAME)", "Linux")
bin-dist: install doc
            tar --exclude="*.svn*" --directory $(IMAGE)/.. -c -v -z -f m3explorer_release_1_1_linux_$(shell uname -r)_bin.tar.gz $(shell cd $(IMAGE) && pwd | xargs basename) 
endif

ifeq ("$(OS_NAME)", "Linux")
doc-dist: install doc
            tar --exclude="*.svn*" --directory $(IMAGE) -c -v -z -f m3explorer_release_1_1_docs.tar.gz $(shell cd $(IMAGE)/doc && pwd | xargs basename) 
endif


#############################
#      INSTALL BUILD        #
#############################

# Note add: install -m 744 $(SRCDIR)/../tests/*.ref $(IMAGE)/tests
# install -m 744 $(SRCDIR)/../tests/stub_test.py $(IMAGE)/tests

install: all 
    @mkdir -p $(IMAGE)
    @mkdir -p $(IMAGE)/bin
    @mkdir -p $(IMAGE)/lib
    @mkdir -p $(IMAGE)/schemas
    @mkdir -p $(IMAGE)/scripts
    @mkdir -p $(IMAGE)/examples
    @mkdir -p $(IMAGE)/examples/simple_sim
    @mkdir -p $(IMAGE)/examples/beverage_can
    @mkdir -p $(IMAGE)/examples/mpeg
    @mkdir -p $(IMAGE)/rsm
    @mkdir -p $(IMAGE)/tests
    @mkdir -p $(IMAGE)/html
    @mkdir -p $(IMAGE)/latex
    @mkdir -p $(IMAGE)/html/template_results_page_files
    install -m 744 $(DSTDIR)/*.so $(IMAGE)/lib
    install -m 744 $(DSTDIR)/multicube_design_space_test*.xml $(IMAGE)/tests
    install -m 744 $(DSTDIR)/debug_*scr $(IMAGE)/tests
    install -m 744 $(DSTDIR)/create_*scr $(IMAGE)/tests
    install -m 744 $(DSTDIR)/do_tests $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../html/*.html $(IMAGE)/html
    install -m 744 $(SRCDIR)/../latex/*.tex $(IMAGE)/latex
    install -m 744 $(SRCDIR)/../html/template_results_page_files/* $(IMAGE)/html/template_results_page_files
    install -m 744 $(SRCDIR)/../schemas/*.xsd $(IMAGE)/schemas
    install -m 744 $(SRCDIR)/../scripts/*.scr $(IMAGE)/scripts
    install -m 744 $(SRCDIR)/../scripts/*.xml $(IMAGE)/examples/mpeg
    install -m 744 $(SRCDIR)/../scripts/full_*.gz $(IMAGE)/examples/mpeg
    install -m 744 $(SRCDIR)/../scripts/*mpeg* $(IMAGE)/examples/mpeg
    install -m 744 $(SRCDIR)/../tests/test*output.ref $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/db7.xml.ref $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/test_xml*.scr $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/test_ff*.scr $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/mpeg_dse.scr $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/mpeg_export_xml.scr $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/pareto_mpeg4.db $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/stub_*.py $(IMAGE)/tests
    install -m 744 $(SRCDIR)/../tests/simple_sim/simple_sim.py $(IMAGE)/examples/simple_sim
    install -m 744 $(SRCDIR)/../tests/simple_sim/simple_sim_scr.scr $(IMAGE)/examples/simple_sim
    install -m 744 $(DSTDIR)/simple_sim_ds.xml $(IMAGE)/examples/simple_sim
    install -m 744 $(SRCDIR)/../tests/beverage_can/beverage_can.py $(IMAGE)/examples/beverage_can
    install -m 744 $(SRCDIR)/../tests/beverage_can/beverage_can_scr.scr $(IMAGE)/examples/beverage_can
    install -m 744 $(DSTDIR)/beverage_can_ds.xml $(IMAGE)/examples/beverage_can
    install -m 744 $(SRCDIR)/../gpl/*xdr* $(IMAGE)/rsm
    @mkdir -p $(IMAGE)/include
    install -m 744 $(DSTDIR)/m3explorer $(IMAGE)/bin
    @for hdr in $(INCDIR)/*.h ; do \
          if cmp -s $$hdr $(IMAGE)/include/`basename $$hdr`; then : ; else \
            echo "Installing $$hdr to $(IMAGE)/include"; \
            install -m 644 $$hdr $(IMAGE)/include; \
          fi; \
        done
    if [ -e $(DSTDIR)/sh_i ] ; then \
         install -m 744 $(DSTDIR)/sh_i $(IMAGE)/rsm; \
    fi ; \
    if [ -e $(DSTDIR)/nn ] ; then \
         install -m 744 $(DSTDIR)/nn $(IMAGE)/rsm; \
    fi ; \
    if [ -e $(DSTDIR)/spline ] ; then \
         install -m 744 $(DSTDIR)/spline $(IMAGE)/rsm; \
    fi ; \
    if [ -e $(DSTDIR)/rbf_interpolator ] ; then \
         install -m 744 $(DSTDIR)/rbf_interpolator $(IMAGE)/rsm; \
    fi ; \
    if [ -e $(DSTDIR)/regressor ] ; then \
         install -m 744 $(DSTDIR)/regressor $(IMAGE)/rsm; \
    fi ; \
    chmod a+x $(IMAGE)/bin/*
    chmod a+x $(IMAGE)/lib/*
    chmod a+x $(IMAGE)/rsm/*
    chmod a+x $(IMAGE)/tests/do_tests

install-doc: install doc
m3explorer: $(M3EXPLORER_TARGETS) 
    $(CXX) $(OTHERLINKFLAGS) $^ -o $@
m3explorer: $(M3EXPLORER_TARGETS) 
    $(CXX) -o $@ $^ $(OTHERLINKFLAGS)
m3explorer: $(M3EXPLORER_TARGETS) 
    $(CXX) $(CXXFLAGS) -o $@ $^ $(OTHERLINKFLAGS)