Re: [petsc-users] Makefile for mixed C++ and Fortran code
Glad it works. Thanks for the update. Satish On Sun, 3 Jun 2018, Danyang Su wrote: > Hi Satish, > > Your makefile works. > > Please ignore the CGAL dependency. I just modified from CGAL example and it > needs to be further optimized with the dependency that is required for the > algorithm I use. > > Thanks, > > Danyang > > > On 18-06-02 02:51 PM, Satish Balay wrote: > > Try the attached makefile. [with correct PETSC_DIR and PETSC_ARCH values] > > > > If you have issues - send the complete makefiles - and complete error log.. > > > > > > On Sat, 2 Jun 2018, Danyang Su wrote: > > > >> Hi Barry, > >> > >> For the code without PETSc, the rules used to compile the code with CGAL is > > note: DLIB can probably be simlified - and a fewof the options eliminated. > > > > > >> DLIB = -lstdc++ -lmetis -lm -L/usr/local/lib -rdynamic > > -lstdc++ is setup by petsc > > > > -lmetis can be a dependency of petsc - so care should be taken to have only > > one copy of metis > > > >> /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so > > Why are these here? Normally these are dependencies of gcc/gfortran [and > > PETSc configure picks up the correct ones] > > > >> /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 > > I have no idea what these are.. > > > > Satish > > > >> /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so > >> -lpthread > >> -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1 > >> /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so > >> /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz > >> /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so > >> /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so > >> -lpthread > >> -Wl,-rpath,/usr/local/lib > >> > >> FFLAGS = -O3 -I$(LIS_INC) > >> CXXFLAGS = -std=c++11 -O3 -I$(LIS_INC) > >> > >> However, after adding these to the makefile using PETSc, I got error > >> telling > >> me that all the petsc include files cannot be found. > >> > >> ../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No > >> such > >> \ > >> file or directory > >> #include > >> > >> ../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No > >> such > >> \ > >> file or directory > >> #include > >> > >> Similar for other head files. However, If I change the file path to the the > >> full path, the code cannot compiled. Does the rule I use destroy the PETSc > >> relative path/ > >> > >> The make commands I use is > >> > >> executable: $(SOURCES) chkopts > >> -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out > >> $(SOURCES) ${PETSC_LIB} ${LIS_LIB} ${DLIB} > >> %.o:%.F90 > >> $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ > >> %.o:%.cpp > >> $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ > >> > >> Thanks, > >> > >> Danyang > >> > >> On 18-06-01 10:41 AM, Smith, Barry F. wrote: > >>> You need to determine exactly what flags are passed to the C++ > >>> compiler > >>> for your compile that works and make sure those same flags are used > >>> in > >>> "PETSc version" of the makefile. You could add the flags directly to > >>> the > >>> rule > >>> > %.o:%.cpp > $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ > >>> Barry > >>> > >>> > On Jun 1, 2018, at 12:37 PM, Danyang Su wrote: > > Follow up: > > With following command > > executable: $(SOURCES) chkopts > -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out > $(SOURCES) ${PETSC_LIB} > > %.o:%.F90 > $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ > %.o:%.cpp > $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ > > The compiler return error: no match function. > > ../../usg/cgal_triangulation_2d.cpp: In function ‘void > outputTriangulation2d(in\ > t, const char*, int, const char*)’: > ../../usg/cgal_triangulation_2d.cpp:485:20: error: no matching function > for > cal\ > l to ‘std::basic_ofstream::open(std::string&)’ > out.open(strfile); > > Thanks, > > > Danyang > > On 18-06-01 10:07 AM, Danyang Su wrote: > > Hi All, > > > > My code needs to link to an external C++ library (CGAL). The code is > > written in Fortran and I have already written interface to let Fortran > > call C++ function. For the sequential version without PETSc, it can be > > compiled without problem using the following makefile. The parallel > > version without CGAL can also be compiled successfully. However, when I > > tried to use PETSc together with CGAL library, I cannot compile the > > code. > > My questions is: How can I modify the makefile? Do I need to reconfigure > > PETSc with special flags? All the makefile samples are shown below.
Re: [petsc-users] Makefile for mixed C++ and Fortran code
Hi Satish, Your makefile works. Please ignore the CGAL dependency. I just modified from CGAL example and it needs to be further optimized with the dependency that is required for the algorithm I use. Thanks, Danyang On 18-06-02 02:51 PM, Satish Balay wrote: Try the attached makefile. [with correct PETSC_DIR and PETSC_ARCH values] If you have issues - send the complete makefiles - and complete error log.. On Sat, 2 Jun 2018, Danyang Su wrote: Hi Barry, For the code without PETSc, the rules used to compile the code with CGAL is note: DLIB can probably be simlified - and a fewof the options eliminated. DLIB = -lstdc++ -lmetis -lm -L/usr/local/lib -rdynamic -lstdc++ is setup by petsc -lmetis can be a dependency of petsc - so care should be taken to have only one copy of metis /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so Why are these here? Normally these are dependencies of gcc/gfortran [and PETSc configure picks up the correct ones] /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 I have no idea what these are.. Satish /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib FFLAGS = -O3 -I$(LIS_INC) CXXFLAGS = -std=c++11 -O3 -I$(LIS_INC) However, after adding these to the makefile using PETSc, I got error telling me that all the petsc include files cannot be found. ../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No such \ file or directory #include ../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No such \ file or directory #include Similar for other head files. However, If I change the file path to the the full path, the code cannot compiled. Does the rule I use destroy the PETSc relative path/ The make commands I use is executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} ${LIS_LIB} ${DLIB} %.o:%.F90 $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ Thanks, Danyang On 18-06-01 10:41 AM, Smith, Barry F. wrote: You need to determine exactly what flags are passed to the C++ compiler for your compile that works and make sure those same flags are used in "PETSc version" of the makefile. You could add the flags directly to the rule %.o:%.cpp $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ Barry On Jun 1, 2018, at 12:37 PM, Danyang Su wrote: Follow up: With following command executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} %.o:%.F90 $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ The compiler return error: no match function. ../../usg/cgal_triangulation_2d.cpp: In function ‘void outputTriangulation2d(in\ t, const char*, int, const char*)’: ../../usg/cgal_triangulation_2d.cpp:485:20: error: no matching function for cal\ l to ‘std::basic_ofstream::open(std::string&)’ out.open(strfile); Thanks, Danyang On 18-06-01 10:07 AM, Danyang Su wrote: Hi All, My code needs to link to an external C++ library (CGAL). The code is written in Fortran and I have already written interface to let Fortran call C++ function. For the sequential version without PETSc, it can be compiled without problem using the following makefile. The parallel version without CGAL can also be compiled successfully. However, when I tried to use PETSc together with CGAL library, I cannot compile the code. My questions is: How can I modify the makefile? Do I need to reconfigure PETSc with special flags? All the makefile samples are shown below. #makefile for sequential version FC = gfortran #FC = ifort CXX = g++ -std=c++11 DLIB = -lstdc++ -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib FFLAGS = -O3 CXXFLAGS = -O3 FPPFLAGS = -DUSECGAL SRC =./../../ SOURCES = $(SRC)usg/math_common.o\
Re: [petsc-users] Makefile for mixed C++ and Fortran code
Try the attached makefile. [with correct PETSC_DIR and PETSC_ARCH values] If you have issues - send the complete makefiles - and complete error log.. On Sat, 2 Jun 2018, Danyang Su wrote: > Hi Barry, > > For the code without PETSc, the rules used to compile the code with CGAL is note: DLIB can probably be simlified - and a fewof the options eliminated. > DLIB = -lstdc++ -lmetis -lm -L/usr/local/lib -rdynamic -lstdc++ is setup by petsc -lmetis can be a dependency of petsc - so care should be taken to have only one copy of metis > /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so Why are these here? Normally these are dependencies of gcc/gfortran [and PETSc configure picks up the correct ones] > /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 I have no idea what these are.. Satish > /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread > -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1 > /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so > /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz > /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so > /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread > -Wl,-rpath,/usr/local/lib > > FFLAGS = -O3 -I$(LIS_INC) > CXXFLAGS = -std=c++11 -O3 -I$(LIS_INC) > > However, after adding these to the makefile using PETSc, I got error telling > me that all the petsc include files cannot be found. > > ../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No such > \ > file or directory > #include > > ../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No such > \ > file or directory > #include > > Similar for other head files. However, If I change the file path to the the > full path, the code cannot compiled. Does the rule I use destroy the PETSc > relative path/ > > The make commands I use is > > executable: $(SOURCES) chkopts > -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out > $(SOURCES) ${PETSC_LIB} ${LIS_LIB} ${DLIB} > %.o:%.F90 > $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ > %.o:%.cpp > $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ > > Thanks, > > Danyang > > On 18-06-01 10:41 AM, Smith, Barry F. wrote: > > You need to determine exactly what flags are passed to the C++ compiler > > for your compile that works and make sure those same flags are used in > > "PETSc version" of the makefile. You could add the flags directly to the > > rule > > > >> %.o:%.cpp > >> $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ > >Barry > > > > > >> On Jun 1, 2018, at 12:37 PM, Danyang Su wrote: > >> > >> Follow up: > >> > >> With following command > >> > >> executable: $(SOURCES) chkopts > >> -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out > >> $(SOURCES) ${PETSC_LIB} > >> > >> %.o:%.F90 > >> $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ > >> %.o:%.cpp > >> $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ > >> > >> The compiler return error: no match function. > >> > >> ../../usg/cgal_triangulation_2d.cpp: In function ‘void > >> outputTriangulation2d(in\ > >> t, const char*, int, const char*)’: > >> ../../usg/cgal_triangulation_2d.cpp:485:20: error: no matching function for > >> cal\ > >> l to ‘std::basic_ofstream::open(std::string&)’ > >> out.open(strfile); > >> > >> Thanks, > >> > >> > >> Danyang > >> > >> On 18-06-01 10:07 AM, Danyang Su wrote: > >>> Hi All, > >>> > >>> My code needs to link to an external C++ library (CGAL). The code is > >>> written in Fortran and I have already written interface to let Fortran > >>> call C++ function. For the sequential version without PETSc, it can be > >>> compiled without problem using the following makefile. The parallel > >>> version without CGAL can also be compiled successfully. However, when I > >>> tried to use PETSc together with CGAL library, I cannot compile the code. > >>> My questions is: How can I modify the makefile? Do I need to reconfigure > >>> PETSc with special flags? All the makefile samples are shown below. > >>> > >>> #makefile for sequential version > >>> > >>> FC = gfortran > >>> #FC = ifort > >>> CXX = g++ -std=c++11 > >>> > >>> DLIB = -lstdc++ -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so > >>> /usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1 > >>> /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so > >>> /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz > >>> /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 > >>> /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so > >>> -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so > >>> /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so > >>> /usr/local/lib/libboost_system.so -lpthread
Re: [petsc-users] Makefile for mixed C++ and Fortran code
Hi Barry, For the code without PETSc, the rules used to compile the code with CGAL is DLIB = -lstdc++ -lmetis -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib FFLAGS = -O3 -I$(LIS_INC) CXXFLAGS = -std=c++11 -O3 -I$(LIS_INC) However, after adding these to the makefile using PETSc, I got error telling me that all the petsc include files cannot be found. ../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No such \ file or directory #include ../../solver/solver_snes_common.F90:27:0: fatal error: petscversion.h: No such \ file or directory #include Similar for other head files. However, If I change the file path to the the full path, the code cannot compiled. Does the rule I use destroy the PETSc relative path/ The make commands I use is executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} ${LIS_LIB} ${DLIB} %.o:%.F90 $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ Thanks, Danyang On 18-06-01 10:41 AM, Smith, Barry F. wrote: You need to determine exactly what flags are passed to the C++ compiler for your compile that works and make sure those same flags are used in "PETSc version" of the makefile. You could add the flags directly to the rule %.o:%.cpp $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ Barry On Jun 1, 2018, at 12:37 PM, Danyang Su wrote: Follow up: With following command executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} %.o:%.F90 $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ The compiler return error: no match function. ../../usg/cgal_triangulation_2d.cpp: In function ‘void outputTriangulation2d(in\ t, const char*, int, const char*)’: ../../usg/cgal_triangulation_2d.cpp:485:20: error: no matching function for cal\ l to ‘std::basic_ofstream::open(std::string&)’ out.open(strfile); Thanks, Danyang On 18-06-01 10:07 AM, Danyang Su wrote: Hi All, My code needs to link to an external C++ library (CGAL). The code is written in Fortran and I have already written interface to let Fortran call C++ function. For the sequential version without PETSc, it can be compiled without problem using the following makefile. The parallel version without CGAL can also be compiled successfully. However, when I tried to use PETSc together with CGAL library, I cannot compile the code. My questions is: How can I modify the makefile? Do I need to reconfigure PETSc with special flags? All the makefile samples are shown below. #makefile for sequential version FC = gfortran #FC = ifort CXX = g++ -std=c++11 DLIB = -lstdc++ -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib FFLAGS = -O3 CXXFLAGS = -O3 FPPFLAGS = -DUSECGAL SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) $(FC) $(FFLAGS) $(FPPFLAGS) -o executable.out $(SOURCES) ${LIS_LIB} $(DLIB) %.o:%.F90 $(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ #makefile for parallel version with PETSc, without CGAL #FC = ifort #FC = gfortran DLIB = -lm FFLAGS = -O3 FPPFLAGS = -DUSEPETSC SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} #makefile for parallel version with PETSc, with CGAL, CANNOT work #FC = ifort #FC = gfortran DLIB = -lm FFLAGS = -O3 FPPFLAGS =
Re: [petsc-users] Makefile for mixed C++ and Fortran code
On 18-06-01 10:29 AM, Smith, Barry F. wrote: What happens if you add ${DLIB} to the end of the line executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} Send all the output from trying this. Barry Thanks, Barry. Still not work after including ${DLIB} On Jun 1, 2018, at 12:07 PM, Danyang Su wrote: Hi All, My code needs to link to an external C++ library (CGAL). The code is written in Fortran and I have already written interface to let Fortran call C++ function. For the sequential version without PETSc, it can be compiled without problem using the following makefile. The parallel version without CGAL can also be compiled successfully. However, when I tried to use PETSc together with CGAL library, I cannot compile the code. My questions is: How can I modify the makefile? Do I need to reconfigure PETSc with special flags? All the makefile samples are shown below. #makefile for sequential version FC = gfortran #FC = ifort CXX = g++ -std=c++11 DLIB = -lstdc++ -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib FFLAGS = -O3 CXXFLAGS = -O3 FPPFLAGS = -DUSECGAL SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) $(FC) $(FFLAGS) $(FPPFLAGS) -o executable.out $(SOURCES) ${LIS_LIB} $(DLIB) %.o:%.F90 $(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ #makefile for parallel version with PETSc, without CGAL #FC = ifort #FC = gfortran DLIB = -lm FFLAGS = -O3 FPPFLAGS = -DUSEPETSC SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} #makefile for parallel version with PETSc, with CGAL, CANNOT work #FC = ifort #FC = gfortran DLIB = -lm FFLAGS = -O3 FPPFLAGS = -DUSEPETSC -DUSECGAL SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} %.o:%.F90 $(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ Thanks, Danyang
Re: [petsc-users] Makefile for mixed C++ and Fortran code
You need to determine exactly what flags are passed to the C++ compiler for your compile that works and make sure those same flags are used in "PETSc version" of the makefile. You could add the flags directly to the rule > %.o:%.cpp >$(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ Barry > On Jun 1, 2018, at 12:37 PM, Danyang Su wrote: > > Follow up: > > With following command > > executable: $(SOURCES) chkopts >-${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out > $(SOURCES) ${PETSC_LIB} > > %.o:%.F90 >$(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ > %.o:%.cpp >$(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ > > The compiler return error: no match function. > > ../../usg/cgal_triangulation_2d.cpp: In function ‘void > outputTriangulation2d(in\ > t, const char*, int, const char*)’: > ../../usg/cgal_triangulation_2d.cpp:485:20: error: no matching function for > cal\ > l to ‘std::basic_ofstream::open(std::string&)’ >out.open(strfile); > > Thanks, > > > Danyang > > On 18-06-01 10:07 AM, Danyang Su wrote: >> Hi All, >> >> My code needs to link to an external C++ library (CGAL). The code is written >> in Fortran and I have already written interface to let Fortran call C++ >> function. For the sequential version without PETSc, it can be compiled >> without problem using the following makefile. The parallel version without >> CGAL can also be compiled successfully. However, when I tried to use PETSc >> together with CGAL library, I cannot compile the code. My questions is: How >> can I modify the makefile? Do I need to reconfigure PETSc with special >> flags? All the makefile samples are shown below. >> >> #makefile for sequential version >> >> FC = gfortran >> #FC = ifort >> CXX = g++ -std=c++11 >> >> DLIB = -lstdc++ -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so >> /usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1 >> /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so >> /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz >> /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 >> /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so >> -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so >> /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so >> /usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib >> >> FFLAGS = -O3 >> CXXFLAGS = -O3 >> >> FPPFLAGS = -DUSECGAL >> >> SRC =./../../ >> >> SOURCES = $(SRC)usg/math_common.o\ >>$(SRC)usg/geometry_definition.o\ >>$(SRC)usg/cgal_common.o\ >> >> ... >> >> executable: $(SOURCES) >>$(FC) $(FFLAGS) $(FPPFLAGS) -o executable.out $(SOURCES) ${LIS_LIB} >> $(DLIB) >> %.o:%.F90 >>$(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ >> %.o:%.cpp >>$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ >> >> >> #makefile for parallel version with PETSc, without CGAL >> >> #FC = ifort >> #FC = gfortran >> >> DLIB = -lm >> >> FFLAGS = -O3 >> >> FPPFLAGS = -DUSEPETSC >> >> SRC =./../../ >> >> SOURCES = $(SRC)usg/math_common.o\ >>$(SRC)usg/geometry_definition.o\ >>$(SRC)usg/cgal_common.o\ >> >> ... >> >> executable: $(SOURCES) chkopts >>-${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out >> $(SOURCES) ${PETSC_LIB} >> >> >> #makefile for parallel version with PETSc, with CGAL, CANNOT work >> >> #FC = ifort >> #FC = gfortran >> >> DLIB = -lm >> >> FFLAGS = -O3 >> >> FPPFLAGS = -DUSEPETSC -DUSECGAL >> >> SRC =./../../ >> >> SOURCES = $(SRC)usg/math_common.o\ >>$(SRC)usg/geometry_definition.o\ >>$(SRC)usg/cgal_common.o\ >> >> ... >> >> executable: $(SOURCES) chkopts >>-${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out >> $(SOURCES) ${PETSC_LIB} >> >> %.o:%.F90 >>$(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ >> %.o:%.cpp >>$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ >> >> >> Thanks, >> >> Danyang >> >
Re: [petsc-users] Makefile for mixed C++ and Fortran code
Follow up: With following command executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} %.o:%.F90 $(FLINKER) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CLINKER) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ The compiler return error: no match function. ../../usg/cgal_triangulation_2d.cpp: In function ‘void outputTriangulation2d(in\ t, const char*, int, const char*)’: ../../usg/cgal_triangulation_2d.cpp:485:20: error: no matching function for cal\ l to ‘std::basic_ofstream::open(std::string&)’ out.open(strfile); Thanks, Danyang On 18-06-01 10:07 AM, Danyang Su wrote: Hi All, My code needs to link to an external C++ library (CGAL). The code is written in Fortran and I have already written interface to let Fortran call C++ function. For the sequential version without PETSc, it can be compiled without problem using the following makefile. The parallel version without CGAL can also be compiled successfully. However, when I tried to use PETSc together with CGAL library, I cannot compile the code. My questions is: How can I modify the makefile? Do I need to reconfigure PETSc with special flags? All the makefile samples are shown below. #makefile for sequential version FC = gfortran #FC = ifort CXX = g++ -std=c++11 DLIB = -lstdc++ -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib FFLAGS = -O3 CXXFLAGS = -O3 FPPFLAGS = -DUSECGAL SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) $(FC) $(FFLAGS) $(FPPFLAGS) -o executable.out $(SOURCES) ${LIS_LIB} $(DLIB) %.o:%.F90 $(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ #makefile for parallel version with PETSc, without CGAL #FC = ifort #FC = gfortran DLIB = -lm FFLAGS = -O3 FPPFLAGS = -DUSEPETSC SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} #makefile for parallel version with PETSc, with CGAL, CANNOT work #FC = ifort #FC = gfortran DLIB = -lm FFLAGS = -O3 FPPFLAGS = -DUSEPETSC -DUSECGAL SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} %.o:%.F90 $(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ Thanks, Danyang
Re: [petsc-users] Makefile for mixed C++ and Fortran code
What happens if you add ${DLIB} to the end of the line > executable: $(SOURCES) chkopts >-${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out > $(SOURCES) ${PETSC_LIB} Send all the output from trying this. Barry > On Jun 1, 2018, at 12:07 PM, Danyang Su wrote: > > Hi All, > > My code needs to link to an external C++ library (CGAL). The code is written > in Fortran and I have already written interface to let Fortran call C++ > function. For the sequential version without PETSc, it can be compiled > without problem using the following makefile. The parallel version without > CGAL can also be compiled successfully. However, when I tried to use PETSc > together with CGAL library, I cannot compile the code. My questions is: How > can I modify the makefile? Do I need to reconfigure PETSc with special flags? > All the makefile samples are shown below. > > #makefile for sequential version > > FC = gfortran > #FC = ifort > CXX = g++ -std=c++11 > > DLIB = -lstdc++ -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so > /usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1 > /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so > /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz > /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 > /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread > -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so > /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so > /usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib > > FFLAGS = -O3 > CXXFLAGS = -O3 > > FPPFLAGS = -DUSECGAL > > SRC =./../../ > > SOURCES = $(SRC)usg/math_common.o\ >$(SRC)usg/geometry_definition.o\ >$(SRC)usg/cgal_common.o\ > > ... > > executable: $(SOURCES) >$(FC) $(FFLAGS) $(FPPFLAGS) -o executable.out $(SOURCES) ${LIS_LIB} $(DLIB) > %.o:%.F90 >$(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ > %.o:%.cpp >$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ > > > #makefile for parallel version with PETSc, without CGAL > > #FC = ifort > #FC = gfortran > > DLIB = -lm > > FFLAGS = -O3 > > FPPFLAGS = -DUSEPETSC > > SRC =./../../ > > SOURCES = $(SRC)usg/math_common.o\ >$(SRC)usg/geometry_definition.o\ >$(SRC)usg/cgal_common.o\ > > ... > > executable: $(SOURCES) chkopts >-${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out > $(SOURCES) ${PETSC_LIB} > > > #makefile for parallel version with PETSc, with CGAL, CANNOT work > > #FC = ifort > #FC = gfortran > > DLIB = -lm > > FFLAGS = -O3 > > FPPFLAGS = -DUSEPETSC -DUSECGAL > > SRC =./../../ > > SOURCES = $(SRC)usg/math_common.o\ >$(SRC)usg/geometry_definition.o\ >$(SRC)usg/cgal_common.o\ > > ... > > executable: $(SOURCES) chkopts >-${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out > $(SOURCES) ${PETSC_LIB} > > %.o:%.F90 >$(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ > %.o:%.cpp >$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ > > > Thanks, > > Danyang >
[petsc-users] Makefile for mixed C++ and Fortran code
Hi All, My code needs to link to an external C++ library (CGAL). The code is written in Fortran and I have already written interface to let Fortran call C++ function. For the sequential version without PETSc, it can be compiled without problem using the following makefile. The parallel version without CGAL can also be compiled successfully. However, when I tried to use PETSc together with CGAL library, I cannot compile the code. My questions is: How can I modify the makefile? Do I need to reconfigure PETSc with special flags? All the makefile samples are shown below. #makefile for sequential version FC = gfortran #FC = ifort CXX = g++ -std=c++11 DLIB = -lstdc++ -lm -L/usr/local/lib -rdynamic /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libCGAL_ImageIO.so.11.0.1 /usr/local/lib/libCGAL.so.11.0.1 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -lGLU -lGL -lX11 -lXext -lz /usr/local/lib/libmpfr.so /usr/local/lib/libgmp.so /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_system.so -lpthread -Wl,-rpath,/usr/local/lib FFLAGS = -O3 CXXFLAGS = -O3 FPPFLAGS = -DUSECGAL SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) $(FC) $(FFLAGS) $(FPPFLAGS) -o executable.out $(SOURCES) ${LIS_LIB} $(DLIB) %.o:%.F90 $(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ #makefile for parallel version with PETSc, without CGAL #FC = ifort #FC = gfortran DLIB = -lm FFLAGS = -O3 FPPFLAGS = -DUSEPETSC SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} #makefile for parallel version with PETSc, with CGAL, CANNOT work #FC = ifort #FC = gfortran DLIB = -lm FFLAGS = -O3 FPPFLAGS = -DUSEPETSC -DUSECGAL SRC =./../../ SOURCES = $(SRC)usg/math_common.o\ $(SRC)usg/geometry_definition.o\ $(SRC)usg/cgal_common.o\ ... executable: $(SOURCES) chkopts -${FLINKER} $(FFLAGS) $(FPPFLAGS) $(CPPFLAGS) -o executable.out $(SOURCES) ${PETSC_LIB} %.o:%.F90 $(FC) $(FFLAGS) $(FPPFLAGS) -c -frounding-math $< -o $@ %.o:%.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -frounding-math $< -o $@ Thanks, Danyang