Question

I am moving a project which uses clapack from osx to linux and experiencing some problems with it. I use clapack by downloading the cmake project, compiling and moving the necessary .h and .a files to a relevant location within my project.

I have used the same steps in both scenarios (osx and linux) and have the same exact source code on both machines however I cannot get the everything to link properly on linux.

the lined of code in my cmake file look like this

#-----------------------------------------------------------------------------
# INCLUDE CLAPACK
#-----------------------------------------------------------------------------
INCLUDE_DIRECTORIES(${VMT_PRJ_SOURCE_DIR}/CLAPACK)
LINK_DIRECTORIES(${VMT_PRJ_SOURCE_DIR}/CLAPACK/lib)
LINK_LIBRARIES(blas f2c lapack tmglib)

and the error I am getting looks like this

/CLAPACK/lib/liblapack.a(sgesvd.c.o): In function `sgesvd_':
sgesvd.c:(.text+0x456): undefined reference to `s_cat'
sgesvd.c:(.text+0x1fa4): undefined reference to `s_cat'

This is the first time I have done a port from osx to linux and don't know if there are some different requirements I need to make in order to link or what the problem is

Any help would be much appreciated.

Scott

Was it helpful?

Solution

The order of linking matters. Since liblapack.a needs functions from libf2c.a, the latter needs to come after the former. So changing

LINK_LIBRARIES(blas f2c lapack tmglib)

to

LINK_LIBRARIES(blas lapack f2c tmglib)

should help.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top