Subject: CGAL users discussion list
List archive
- From:
- To:
- Subject: Recompile TAUCS to Enable SuperLU
- Date: Fri, 30 May 2008 04:55:35 +0200
Dear all,
I posted a question about how to compile TAUCS with VC8.0 some days ago. With
the help of Laurent Saboret, I successfully compiled it with his latest
script build_taucs_win32_for_CGAL.bat.
But I still can not achieve my goal currently.
The reason I want to recompile TAUCS is that I want to use LU decomposition
to solve linear system with unsymmetric system matrix. As we know, taucs
provided an out-of-core LU solver 'taucs_ooc_factor_lu' and
'taucs_ooc_solve_lu'. This implementation can be very slow. So I want to use
SuperLU instead. I find that there are already two interface functions
('taucs_ccs_factor_superlu' and 'taucs_ccs_solve_superlu') for SuperLU
defined in '\src\taucs_superlu.c'. Unfortunately, TAUCS does not compile this
file and hence there seems no way to access superlu with default
configuration!
As a result, I decide to make some changes to TAUCS compilation config.
The way I do this is as follows (take the _MT runtime for example):
0) I modified '\src\taucs_superlu.c' to use the latest SuperLU (v3.0)
functions. This step is tested to be correct as the compilation has passsed.
1) I modified '\configurator\taucs_structure.h' by adding an items in module
definition:
{ "SUPERLU", include, 0 , {"BASE", 0}, {"taucs_superlu", 0}, "libtaucs",
{"LIBSUPERLU", 0} }
also, I added the source file definitino into 'struct file file[]':
{ "taucs_superlu", "DIRSRC", csource|dreal }
by doing this, the generated '\build\win32_MT\makefile' looks correct with
the following sentences appearing:
LIBS = $(LIBLAPACK) $(LIBBLAS) $(LIBMETIS) $(LIBSUPERLU) $(LIBF77) $(LIBC)
......
$(DIROBJ)taucs_superlu_D$(OBJEXT): $(DIRSRC)taucs_superlu.c $(INCS) $(STDDEPS)
$(CC) -c $(CFLAGS) $(STDDEFS) $(STDINCS) \
-DTAUCS_CORE_DOUBLE \
$(DIRSRC)taucs_superlu.c \
$(COUTFLG)$(DIROBJ)taucs_superlu_D$(OBJEXT)
......
libtaucs_content = \
...
$(DIROBJ)taucs_superlu_D$(OBJEXT) \
...
2) In file '\config\win32_MT.mk', I added a definition to $(LIBSUPERLU) :
LIBSUPERLU = external\\lib\\win32\\libsuperlu_3.0.lib
3) I put a compiled SuperLU (v3.0) lib 'libsuperlu_3.0.lib' into folder
'external\lib\win32\'
4) I put all header files into folder '\src\' needed when compiling
'\src\taucs_superlu.c'
5) HERE, I begin to compile TAUCS by running build_taucs_win32_for_CGAL.bat.
This stage goes without any problem!
The installation copys the 'libsuperlu_3.0.lib' into the folder
'P:\ath\to\CGAL\auxiliary\taucs\lib' just as other libs, e.g., 'libatlas.lib'.
6) In order to use SuperLU, I added the declaration of functions
'taucs_ccs_factor_superlu' and 'taucs_ccs_solve_superlu' into header
'P:\ath\to\CGAL\auxiliary\taucs\include\taucs_private.h'
THEN, I call the function 'taucs_ccs_solve_superlu' in my VC8.0 project with
correct CGAL settings (TAUCS lib/header). But the compiler complains the
following linking error:
......
1>Linking...
1>libtaucs-vc71-mt-s.lib(taucs_superlu_D.obj) : error LNK2019: unresolved
external symbol _StatFree referenced in function _taucs_ccs_factor_superlu
1>libtaucs-vc71-mt-s.lib(taucs_superlu_D.obj) : error LNK2019: unresolved
external symbol _Destroy_CompCol_Permuted referenced in function
_taucs_ccs_factor_superlu
1>libtaucs-vc71-mt-s.lib(taucs_superlu_D.obj) : error LNK2019: unresolved
external symbol _Destroy_SuperMatrix_Store referenced in function
_taucs_ccs_factor_superlu
......
1>Release\MeshStudio.exe : fatal error LNK1120: 14 unresolved externals
It seems the compiler does not know how to find the SuperLU lib. But in fact
I have put 'libsuperlu_3.0.lib' into 'P:\ath\to\CGAL\auxiliary\taucs\lib' and
my project has set the Additional Library Dir correctly as follows:
"$(CGALROOT)\lib";"$(CGALROOT)\auxiliary\gmp\lib";"$(CGALROOT)\auxiliary\taucs\lib"
I think there is no difference between 'libsuperlu_3.0.lib' and
'libatlas.lib' (and other external libs such as 'liblapack.lib'). Why does
the compiler know how to find 'libatlas.lib' but not 'libsuperlu_3.0.lib'?
Did I miss some other critical steps in this procedural? Can anyone tell me
what's the problem?
Thank you for your patiently reading. I hope I have described my problem
clearly.
Best regards!
Kevin
- Recompile TAUCS to Enable SuperLU, kevin . kai . xu, 05/30/2008
- Re: [cgal-discuss] Recompile TAUCS to Enable SuperLU, Laurent . Saboret, 05/30/2008
- Re: [cgal-discuss] Recompile TAUCS to Enable SuperLU, Kevin Xu, 05/31/2008
- Re: [cgal-discuss] Recompile TAUCS to Enable SuperLU, Laurent . Saboret, 05/30/2008
Archive powered by MHonArc 2.6.16.