Ho un programma sofisticato per il montaggio di funzioni non lineari con il metodo di Levenberg-Marquardt.Errore di collegamento di Lapack, ricompilare con -fPIC
il programma utilizza un risolutore per un sistema di equazioni lineari dalla biblioteca LAPACK, dove ho usato:
extern "C" ...
Per creare un collegamento a librerie FORTRAN esterne. Il programma ha funzionato senza problemi sul mio laptop (che utilizza Ubuntu 12.04), e lo sto usando da un po 'per i test.
Il problema:
Ora mi sono trasferito al grande grasso computer a 64-core, al fine di iniziare a fare alcuni calcoli reali, il computer dispone di una Scientific Linux 6 su di esso. Si è scoperto che il grande computer non dispone LAPACK installato, così ho preso LAPACK 3.4.2, compilato, e seguite le istruzioni qui per costruirlo:
http://matrixprogramming.com/2011/04/using-lapack-from-c/comment-page-1
Dopo di che, ho cambiato assolutamente nulla nel mio file cMake che ha lavorato prima, e appena aggiunto l'opzione di collegamento:
-L/xdata/Compilers/Sources/lapack-3.4.2
Ora ottengo l'errore:
/usr/bin/ld: /xdata/Compilers/Sources/lapack-3.4.2/liblapack.a(dsytrf.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
E solo per la cronaca, il mio script è CMake ha -fPIC e -fPIE ovunque ... Il collegamento lo uso:
target_link_libraries(LibsModule -lgsl)
target_link_libraries(LibsModule -lgslcblas)
target_link_libraries(LibsModule -lrt)
target_link_libraries(LibsModule -lpthread)
target_link_libraries(LibsModule -pie)
target_link_libraries(LibsModule -fPIC)
target_link_libraries(LibsModule -L/xdata/Compilers/Sources/lapack-3.4.2)
target_link_libraries(LibsModule -lgfortran)
target_link_libraries(LibsModule -llapack -fPIC)
target_link_libraries(LibsModule -lblas -fPIC)
cosa ho fatto di sbagliato? Si prega di avvisare.
Grazie.