我有一個用Levenberg-Marquardt方法擬合非線性函數的複雜程序。Lapack鏈接錯誤,用-fPIC重新編譯
程序使用解算器爲線性方程的從LAPACK文庫,其中我使用了一個系統:
extern "C" ...
要連結到外部FORTRAN庫。該程序在我的筆記本電腦上運行時沒有任何問題(使用Ubuntu 12.04),我一直在使用它進行測試。
問題:
現在我才能開始做一些真正的計算移到大發64核電腦,在電腦上有一個科學的Linux 6。原來,大的計算機沒有安裝LAPACK,所以我就LAPACK 3.4.2,編譯它,並遵循從這裏的說明來構建它:
http://matrixprogramming.com/2011/04/using-lapack-from-c/comment-page-1
在那之後,我改變了絕對沒有在我的cmake的文件,它的工作之前,和剛添加的鏈接選項:
-L/xdata/Compilers/Sources/lapack-3.4.2
現在我得到的錯誤:
/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
和公正的記錄,我的CMake的腳本是有-fPIC和-fPIE無處不在...我用它的鏈接:
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)
我做了什麼錯?請指教。
謝謝。