[petsc-users] linking to external library
Jed Brown
jedbrown at mcs.anl.gov
Tue Jun 5 22:38:59 CDT 2012
2012/6/5 Wu Degang <samuelandjw at gmail.com>
> Hi,
>
> In addition to petsc and slepc, I also need to link my program to external
> libraries such as GSL. I would like to modify the sample makefile in
> ${SLEPC_DIR}/src/eps/examples/**tutorial/makefile rather than writing one
> from scratch. I modified the makefile so that
>
> ex1: ex1.o chkopts
> -${CLINKER} -o ex1 ex1.o ${SLEPC_LIB}
> ${RM} ex1.o
>
> becomes
>
> ex1: ex1.o chkopts
> -${CLINKER} -o ex1 ex1.o ${SLEPC_LIB} -lgsl -L/opt/local/lib
> ${RM} ex1.o
>
> But the linking process failed. The output:
>
> bash-3.2$ make ex1
> /Users/wudegang/petsc-3.2-p7/**arch-darwin-c-debug/bin/mpic++ -o ex1.o -c
> -Wall -Wwrite-strings -Wno-strict-aliasing -Wno-unknown-pragmas -g
> -I/Users/wudegang/petsc-3.2-**p7/include -I/Users/wudegang/petsc-3.2-**p7/arch-darwin-c-debug/include
> -I/opt/local/include -D__INSDIR__=src/eps/examples/**tutorials/
> -I/Users/wudegang/slepc-3.2-p5 -I/Users/wudegang/slepc-3.2-**p5/arch-darwin-c-debug/include
> -I/Users/wudegang/slepc-3.2-**p5/include ex1.c
> /Users/wudegang/petsc-3.2-p7/**arch-darwin-c-debug/bin/mpic++
> -Wl,-multiply_defined,suppress -Wl,-multiply_defined -Wl,suppress
> -Wl,-commons,use_dylibs -Wl,-search_paths_first
> -Wl,-multiply_defined,suppress -Wl,-multiply_defined -Wl,suppress
> -Wl,-commons,use_dylibs -Wl,-search_paths_first -Wall -Wwrite-strings
> -Wno-strict-aliasing -Wno-unknown-pragmas -g -o ex1 ex1.o
> -L/Users/wudegang/slepc-3.2-**p5/arch-darwin-c-debug/lib
> -L/Users/wudegang/slepc-3.2-**p5/arch-darwin-c-debug/lib -lslepc
> -L/Users/wudegang/petsc-3.2-**p7/arch-darwin-c-debug/lib -lpetsc
> -L/usr/X11R6/lib -lX11 -lpthread -llapack -lblas -lmpi_cxx -lstdc++ -ldl
> -lgsl -L/opt/local/lib
>
I'm going to guess that you have a functional liblapack and libblas at
/usr/lib and a broken one (possibly installed by macports) in
/opt/local/lib which gets picked up when the -L/opt/local/lib option is
added.
Fix is to remove the BLAS and LAPACK from in /opt/local/lib so that the one
at /usr/lib can be used.
> Undefined symbols for architecture x86_64:
> "_dgelqf", referenced from:
> IPCGSBiOrthogonalization(_p_**IP*, int, _p_Vec**, _p_Vec**, _p_Vec*,
> double*, double*, double*)in libslepc.a(iporthog.c.o)
> "_dormlq", referenced from:
> IPCGSBiOrthogonalization(_p_**IP*, int, _p_Vec**, _p_Vec**, _p_Vec*,
> double*, double*, double*)in libslepc.a(iporthog.c.o)
> "_dlaev2", referenced from:
> EPSSolve_TS_Power(_p_EPS*) in libslepc.a(power.c.o)
> EPSSolve_Power(_p_EPS*) in libslepc.a(power.c.o)
> "_dlanhs", referenced from:
> EPSHessCond(int, double*, int, double*)in libslepc.a(subspace.c.o)
> "_dgetrf", referenced from:
> EPSHessCond(int, double*, int, double*)in libslepc.a(subspace.c.o)
> EPSTranslateHarmonic(int, double*, int, double, double, double*,
> double*)in libslepc.a(ks-harm.c.o)
> MatLUFactor_SeqDense(_p_Mat*, _p_IS*, _p_IS*, MatFactorInfo const*)in
> libpetsc.a(dense.c.o)
> _**KSPDGMRESComputeDeflationData_**DGMRES in libpetsc.a(dgmres.c.o)
> _KSPDGMRESImproveEig_DGMRES in libpetsc.a(dgmres.c.o)
> dvd_improvex_jd_proj_cuv(_**dvdDashboard*, int, int, _p_Vec***,
> _p_Vec***, _p_Vec**, _p_Vec***, double**, double*, double*, double*,
> double*, int)in libslepc.a(dvd_improvex.c.o)
> "_dgetri", referenced from:
> EPSHessCond(int, double*, int, double*)in libslepc.a(subspace.c.o)
> "_dlange", referenced from:
> EPSHessCond(int, double*, int, double*)in libslepc.a(subspace.c.o)
> "_dsytrd", referenced from:
> ArrowTridFlip(int, int, double*, double*, double*, double*)in
> libslepc.a(ks-symm.c.o)
> "_dorgtr", referenced from:
> ArrowTridFlip(int, int, double*, double*, double*, double*)in
> libslepc.a(ks-symm.c.o)
> "_dsteqr", referenced from:
> ArrowTridFlip(int, int, double*, double*, double*, double*)in
> libslepc.a(ks-symm.c.o)
> "_dgetrs", referenced from:
> EPSTranslateHarmonic(int, double*, int, double, double, double*,
> double*)in libslepc.a(ks-harm.c.o)
> MatMatSolve_SeqDense(_p_Mat*, _p_Mat*, _p_Mat*)in
> libpetsc.a(dense.c.o)
> MatSolve_SeqDense(_p_Mat*, _p_Vec*, _p_Vec*)in libpetsc.a(dense.c.o)
> MatSolveTranspose_SeqDense(_p_**Mat*, _p_Vec*, _p_Vec*)in
> libpetsc.a(dense.c.o)
> MatSolveAdd_SeqDense(_p_Mat*, _p_Vec*, _p_Vec*, _p_Vec*)in
> libpetsc.a(dense.c.o)
> MatSolveTransposeAdd_SeqDense(**_p_Mat*, _p_Vec*, _p_Vec*,
> _p_Vec*)in libpetsc.a(dense.c.o)
> _KSPDGMRESApplyDeflation_**DGMRES in libpetsc.a(dgmres.c.o)
> ...
> "_dgesvd", referenced from:
> EPSUpdateVectors(_p_EPS*, int, _p_Vec**, int, int, double*, int,
> double*, int)in libslepc.a(arnoldi.c.o)
> PCSetUp_SVD(_p_PC*) in libpetsc.a(svd.c.o)
> KSPComputeExtremeSingularValue**s_GMRES(_p_KSP*, double*, double*)in
> libpetsc.a(gmreig.c.o)
> "_dlasv2", referenced from:
> EPSCleanDenseSchur(int, int, double*, int, double*, int, double*,
> double*, int, PetscBool)in libslepc.a(dvd_blas.c.o)
> "_dtgevc", referenced from:
> dvd_compute_eigenvectors(int, double*, int, double*, int, double*,
> int, double*, int, double*, int, PetscBool)in libslepc.a(dvd_blas.c.o)
> "_dtrevc", referenced from:
> dvd_compute_eigenvectors(int, double*, int, double*, int, double*,
> int, double*, int, double*, int, PetscBool)in libslepc.a(dvd_blas.c.o)
> EPSComputeVectors_Schur(_p_**EPS*) in libslepc.a(default.c.o)
> QEPComputeVectors_Schur(_p_**QEP*) in libslepc.a(qepdefault.c.o)
> DenseSelectedEvec(double*, int, double*, double*, int, PetscBool,
> int, double*)in libslepc.a(dense.c.o)
> "_dgeqrf", referenced from:
> SlepcDenseOrth(double*, int, int, int, double*, int, int*)in
> libslepc.a(dvd_blas.c.o)
> PCCreateTransferOp_ASA(__PC_**ASA_level*, PetscBool) in
> libpetsc.a(asa.c.o)
> "_dorgqr", referenced from:
> SlepcDenseOrth(double*, int, int, int, double*, int, int*)in
> libslepc.a(dvd_blas.c.o)
> PCCreateTransferOp_ASA(__PC_**ASA_level*, PetscBool) in
> libpetsc.a(asa.c.o)
> "_dpbtrf", referenced from:
> VecsOrthonormalize(_p_Vec**, int, double*, double*)in
> libslepc.a(dvd_blas.c.o)
> "_dgeevx", referenced from:
> EPSDenseNHEP(int, double*, double*, double*, double*, double*)in
> libslepc.a(dense.c.o)
> "_dstevr", referenced from:
> EPSDenseTridiagonal(int, double*, double*, double*, double*)in
> libslepc.a(dense.c.o)
> "_dtgexc", referenced from:
> EPSSortDenseSchurGeneralized(_**p_EPS*, int, int, int, double*,
> double*, int, double*, double*, double*, double*)in libslepc.a(dense.c.o)
> "_dlamch", referenced from:
> EPSSortDenseSchurGeneralized(_**p_EPS*, int, int, int, double*,
> double*, int, double*, double*, double*, double*)in libslepc.a(dense.c.o)
> "_dlag2", referenced from:
> EPSSortDenseSchurGeneralized(_**p_EPS*, int, int, int, double*,
> double*, int, double*, double*, double*, double*)in libslepc.a(dense.c.o)
> "_dtrexc", referenced from:
> EPSSortDenseSchur(_p_EPS*, int, int, double*, int, double*, double*,
> double*)in libslepc.a(dense.c.o)
> QEPSortDenseSchur(_p_QEP*, int, int, double*, int, double*, double*,
> double*)in libslepc.a(qepdense.c.o)
> "_dhseqr", referenced from:
> EPSDenseSchur(int, int, double*, int, double*, double*, double*)in
> libslepc.a(dense.c.o)
> _KSPDGMRESComputeSchurForm_**DGMRES in libpetsc.a(dgmres.c.o)
> "_dgehrd", referenced from:
> EPSDenseHessenberg(int, int, double*, int, double*)in
> libslepc.a(dense.c.o)
> "_dorghr", referenced from:
> EPSDenseHessenberg(int, int, double*, int, double*)in
> libslepc.a(dense.c.o)
> "_dsygvd", referenced from:
> EPSDenseGHEP(int, double*, double*, double*, double*)in
> libslepc.a(dense.c.o)
> "_dsyevr", referenced from:
> EPSDenseHEP(int, double*, int, double*, double*)in
> libslepc.a(dense.c.o)
> "_dggevx", referenced from:
> EPSDenseGNHEP(int, double*, double*, double*, double*, double*,
> double*)in libslepc.a(dense.c.o)
> "_dbdsdc", referenced from:
> SVDSolve_Lanczos(_p_SVD*) in libslepc.a(gklanczos.c.o)
> "_dgesdd", referenced from:
> SVDDense(int, int, double*, double*, double*, double*)in
> libslepc.a(svddense.c.o)
> "_dpotrf", referenced from:
> MatCholeskyFactor_SeqDense(_p_**Mat*, _p_IS*, MatFactorInfo
> const*)in libpetsc.a(dense.c.o)
> KSPSolve_BCGSL(_p_KSP*) in libpetsc.a(bcgsl.c.o)
> "_dpotrs", referenced from:
> MatMatSolve_SeqDense(_p_Mat*, _p_Mat*, _p_Mat*)in
> libpetsc.a(dense.c.o)
> MatSolve_SeqDense(_p_Mat*, _p_Vec*, _p_Vec*)in libpetsc.a(dense.c.o)
> MatSolveTranspose_SeqDense(_p_**Mat*, _p_Vec*, _p_Vec*)in
> libpetsc.a(dense.c.o)
> MatSolveAdd_SeqDense(_p_Mat*, _p_Vec*, _p_Vec*, _p_Vec*)in
> libpetsc.a(dense.c.o)
> MatSolveTransposeAdd_SeqDense(**_p_Mat*, _p_Vec*, _p_Vec*,
> _p_Vec*)in libpetsc.a(dense.c.o)
> KSPSolve_BCGSL(_p_KSP*) in libpetsc.a(bcgsl.c.o)
> "_dtrsen", referenced from:
> _KSPDGMRESComputeSchurForm_**DGMRES in libpetsc.a(dgmres.c.o)
> "_dgerfs", referenced from:
> _KSPDGMRESApplyDeflation_**DGMRES in libpetsc.a(dgmres.c.o)
> "_dgges", referenced from:
> _KSPDGMRESImproveEig_DGMRES in libpetsc.a(dgmres.c.o)
> dvd_calcpairs_projeig_qz_gen(_**dvdDashboard*) in
> libslepc.a(dvd_calcpairs.c.o)
> "_dtgsen", referenced from:
> _KSPDGMRESImproveEig_DGMRES in libpetsc.a(dgmres.c.o)
> "_dstebz", referenced from:
> KSPSolve_GLTR(_p_KSP*) in libpetsc.a(gltr.c.o)
> "_dpttrf", referenced from:
> KSPSolve_GLTR(_p_KSP*) in libpetsc.a(gltr.c.o)
> "_dpttrs", referenced from:
> KSPSolve_GLTR(_p_KSP*) in libpetsc.a(gltr.c.o)
> "_dstein", referenced from:
> KSPSolve_GLTR(_p_KSP*) in libpetsc.a(gltr.c.o)
> "_dgeev", referenced from:
> KSPComputeEigenvaluesExplicitl**y(_p_KSP*, int, double*, double*)in
> libpetsc.a(eige.c.o)
> KSPComputeEigenvalues_GMRES(_**p_KSP*, int, double*, double*,
> int*)in libpetsc.a(gmreig.c.o)
> ld: symbol(s) not found for architecture x86_64
> collect2: ld returned 1 exit status
> make: [ex1] Error 1 (ignored)
> /bin/rm -f ex1.o
>
> Wu Degang
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120605/1fd5f6af/attachment.html>
More information about the petsc-users
mailing list