[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